Uscita da una strategia di reversal

Viewing 15 posts - 1 through 15 (of 33 total)
  • Author
    Posts
  • #171841 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, mi riallaccio a questo topic sulle chiusure per chiederti come scriveresti l’uscita  da una strategia di reversal quando si verifica la seguente condizione:

    close della barra attuale < close di ieri alle 17:24 (dato che la formula MTF sotto riportata non prende, per i cfd, come riferimento le 17:24)

    timeframe(daily,updateOnClose)

    dayClose = Dclose(o)

    quindi non funziona scrivere nel TF di default:

    if longOnMarket and close>dayClose then         // l’entrata long è  quindi alla notte in gap down e si esce in gain alla chiusura del gap
    sell 1 contracts at market
    endif

    #171842 quote
    MauroPro
    Participant
    Veteran

    alla riga 2:

    close della barra attuale > close di ieri alle 17:24 (dato che la formula MTF sotto riportata non prende, per i cfd, come riferimento le 17:24)

    #171846 quote
    robertogozzi
    Moderator
    Master

    Riguarda una strategia, quindi va aperto un nuovo argomento nel supporto ProOrder.

    L’ho spostato io.

    Se vuoi fare un riferimento ad altri argomenti puoi postare un link.

    #171867 quote
    MauroPro
    Participant
    Veteran

    Ripropongo allora la domanda in modo più semplice, come si scrive una condizione di uscita del tipo:

    esci se la chiusura della barra attuale è maggiore della chiusura di ieri alle 17:24 (chiusura del mercato)?

    #171869 quote
    robertogozzi
    Moderator
    Master

    Eccolo:

    IF close > Dclose(1) THEN
       SELL AT MARKET      //Long
       EXITSHORT AT MARKET //Short
    ENDIF
    #171870 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, ho provato, ma non mi funziona. Potresti sostituire: Dclose(1) con un altra formula?

    #171871 quote
    MauroPro
    Participant
    Veteran

    Dclose (1) non è la chiusura delle 17:24, inoltre vorrei maggiore flessibilità, es. uscire se la chiusura della barra attuale di oggi è maggiore del prezzo di ieri alle 10:00 (ad esempio).

    #171876 quote
    robertogozzi
    Moderator
    Master

    La data puoi stabilirla tu, che siano le 10:00 o quella di chiusura:

    IF Time = 172400 THEN
       Chiusura = close
    ENDIF
    IF close > Chiusura THEN
       SELL AT MARKET      //Long
       EXITSHORT AT MARKET //Short
    ENDIF
    #171877 quote
    robertogozzi
    Moderator
    Master

    In effetti se metti le 10:00 potrebbero essere quelle di oggi, quindi va fatto così:

    ONCE PrevClose = 9999999
    ONCE Chiusura  = 9999999
    IF Time = 100000 THEN
       PrevClose = Chiusura
       Chiusura  = close
    ENDIF
    IF close > PrevClose THEN
       SELL AT MARKET      //Long
       EXITSHORT AT MARKET //Short
    ENDIF
    #171878 quote
    MauroPro
    Participant
    Veteran

    Grazie per la risposta ti chiedo alcuni chiarimenti:

    • Come faccio a dirgli che devono essere le 172400 di ieri e non di oggi?
    • Se uso Dclose: IG a che orario si riferisce? Mi sembra l’una di notte, ma vorrei una conferma.
    • Se uso Dclose con updateOnClose, per avere, quale che sia per IG, l’orario che prende di chiusura devo scrivere, per avere la “chiusura” di ieri: Dclose(0) o Dclose(1)?
    #171879 quote
    robertogozzi
    Moderator
    Master

    Pensavo che alle 17:24 tu facessi chiudere l’operatività.

    Usa il secondo post, quello delle 10 e sostituisci l’ora.

    Dclose usa la chiusura della barra Daily, adesso è all’una, con l’ora solare alla mezzanotte (per la precisione adesso 00:59:59, prima alle 23:59:59, perché 00:00 era già il giorno successivo, come pure lo è alle 01:00 adesso)

    Se usi un TF intraday devi usare Dclose(1) per la barra di ieri, che ci sia UpdateOnClose o meno, però io consiglio di usare il Timeframe DAILY con UpdateOnClose o Default (a meno che tu non abbia raggiunto il limite di 6 timeframe diversi, 5 + quello di default, però i TF con e senza UpdateOnClose sono considerati 1 anche se scritti due volte):

    //Questi sono identici, però io preferisco quello che usa il DAILY
    //, con UpdateOnClose o con Default:
    //
    Timeframe(4h,UpdateOnClose)
    ChiusuraIeri = Dclose(1)
    //
    Timeframe(4h,Default)
    ChiusuraIeri = Dclose(1)       //esattamente come sopra perché
    //                               la chiusura giornaliera di ieri
    //                               non può mai più cambiare
    //
    Timeframe(Daily,UpdateOnClose)
    ChiusuraIeri = close           //come sopra, perché UpdateOnClose
    //                               aggiorna la variabile alla chiusura
    //                               della candela DAILY, quindi in
    //                               corso di formazione non cambia.
    //
    Timeframe(Daily,Default)       //come sopra, ma in questo caso
    //                               occorre usare [1] perché CLOSE
    //                               aggiorna la variabile durante la
    //                               formazione in corso.
    ChiusuraIeri = close[1]
    MauroPro thanked this post
    #171880 quote
    robertogozzi
    Moderator
    Master

    Nel post sopra sono considerati usati 3 Timeframe (i due indicati, anche se scritti 4 volte, più quello di default, che è quello sul grafico, a meno che non sia uguale ad uno dei due già presenti nel codice).

    #171899 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, ho provato ad utilizzare la tua formula in una bozza sperimentale di TS appena costruito.

    Tuttavia non mi sembra che PrevClose funzioni bene: non rispetta le distanze con un Flag che ho inserito.  Probabilmente sbaglio qualcosa. Quando hai tempo puoi controllare? (Dax 3 minuti)

    Grazie

    // Dax 3 minuti
    DEFPARAM CumulateOrders=False
    DEFPARAM Flatbefore = 000000
    DEFPARAM Flatafter = 220000
    
    myST= superTrend[3,10]
    
    ONCE PrevClose = 9999999
    ONCE Chiusura  = 9999999
    IF Time = 173000 THEN
    PrevClose = Chiusura
    Chiusura  = close
    // if close > PrevClose then
    //sell at market
    //exitShort at market
    //endif
    ENDIF
    //------------------------------------------
    If not onmarket then
    maxPrice=0
    minPrice=close
    highReached=0
    lowReached=0
    endif
    //----------------------------------------
    If not onMarket then
    maxPrice=Max(maxPrice,high)
    if maxPrice-PrevClose>30*pointSize then
    highReached=1
    else
    highReached=0
    endif
    endif
    
    If not onMarket then
    minPrice=Min(minPrice,low)
    if PrevClose-minPrice>30*pointSize then
    lowReached=1
    else
    lowReached=0
    endif
    endif
    //-------------------------------------------------
    if close crosses under myST and highReached=1 then
    crossUnderST=1
    endif
    
    if close crosses over myST and lowReached=1 then
    crossOverST=1
    endif
    //----------------------------------------------------
    if not onMarket and crossOverST = 1 then
    buy 1 contracts at market
    endif
    
    if longOnMarket and close>PrevClose  then
    sell 1 contracts at market
    crossOverST=0
    lowReached=0
    endif
    
    if not onMarket and crossUnderST=1 then
    sellShort 1 contracts at market
    endif
    
    if shortOnMarket and close<PrevClose then
    exitShort 1 contracts at market
    crossUnderST=0
    highReached=0
    endif
    //--------------------------------------------------------
    set stop pLoss 50
    #171916 quote
    robertogozzi
    Moderator
    Master

    Mi pare funzioni.

    Se noti valori erreti Indicami i dati per poterlo verificare.

    Prende il valore delle 173000 (cioè della candela che si è aperta alle 172500). Puoi sostituire TIME (orario di chiusura candela) con OPENTIME (orario di apertura candela).

    #171917 quote
    MauroPro
    Participant
    Veteran

    Ho messo nelle righe 28 e 37 del codice sopra riportato rispettivamente: maxPrice-prevClose>50*pointSize e prevClose-minPrice>50*poinSize  per rendere il problema più chiaro.

    Nell’immagine si vede che la differenza tra le 17:30  di ieri (15707) ed il minimo raggiunto a 15669 (i due rettangoli azzurri nell’immagine) è inferiore a 50 punti, quindi il TS non dovrebbe entrare in quanto il flag lowReached dovrebbe essere 0.

    Image-001-1.jpg Image-001-1.jpg
Viewing 15 posts - 1 through 15 (of 33 total)
  • You must be logged in to reply to this topic.

Uscita da una strategia di reversal


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
MauroPro @mauropro Participant
Summary

This topic contains 32 replies,
has 2 voices, and was last updated by MauroPro
4 years, 7 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 06/16/2021
Status: Active
Attachments: 6 files
Logo Logo
Loading...