Problem invio codice ProOrder

Viewing 15 posts - 1 through 15 (of 36 total)
  • Author
    Posts
  • #53259 quote
    keemax73
    Participant
    Average

    Ciao, a tutti.

    Se cerco di inviare questo codice a ProOrder non me lo fa fare.

    Il codice è il seguente :

    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    //DEFPARAM FLATBEFORE = 080000
    //DEFPARAM FLATAFTER = 220000
    
    //Contratti
    c = 1
    
    // Condizioni per entrare su posizioni long
    indicator1 = MACD[12,26,9](close)
    c1 = (indicator1 >= 0)
    indicator2 = MACDline[12,26,9](close)
    c2 = (indicator2 CROSSES OVER 3) //3
    
    IF c1 AND c2 THEN
    BUY c CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    indicator3 = MACD[12,26,9](close)
    c3 = (indicator3 <= -4) //-4
    
    IF c3 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per entrare su posizioni Short
    indicator4 = MACD[12,26,9](close)
    c4 = (indicator4 <= 0)
    indicator5 = MACDline[12,26,9](close)
    c5 = (indicator5 CROSSES UNDER 9) //10
    
    IF c4 AND c5 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    indicator6 = MACD[12,26,9](close)
    c6 = (indicator6 >= 6) //6
    
    IF c6 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
    
    // Loss, Profit
    SET STOP LOSS 13*AverageTrueRange[8](close) //13 - 10
    SET TARGET PROFIT 14*AverageTrueRange[13](close) //14 - 12

     

    L’errore è quello indicato nell’immagine allegata.

    #53274 quote
    robertogozzi
    Moderator
    Master

    Ti prego di utilizzare il pulsante “Insert PRT code” indicato con i simboli “<>” sulla barra grigia, in modo da facilitare la comprensione del codice.

    Per quanto riguarda l’errore segnalato è piuttosto chiaro, NON si possono chiudere parzialmente ordini, quindi usa

    SELL AT MARKET                 //corretto
    //SELL c CONTRACT AT MARKET    //errato, indipendentemente dal valore di c

    vedi link https://www.prorealcode.com/documentation/sell/.

    Roberto

    #53314 quote
    keemax73
    Participant
    Average

    Grazie per la soluzione e sorry per il link del mio codice.

    Per curiosità, come potrebbe essere migliorato secondo la tua esperienza ?

    Sono alle prime armi …

    #53315 quote
    robertogozzi
    Moderator
    Master

    Posso darti consigli su come migliorare il codice, per il resto (indicatori, settaggi ecc…) devi provare a fare dei test seguendo qualche strategia che conosci o che trovi nel forum o sul web. Ad esempio, per evitare, nel MACD, di ripetere sempre 12,26,9 puoi creare tre variabili e chiamarle Macd1, macd2 e Macd3 con quei valori, così è più facile fare dei test cambiandoli di volta in volta all’inizio, senza doverli cambiare dappertutto, così:

    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    //DEFPARAM FLATBEFORE = 080000
    //DEFPARAM FLATAFTER = 220000
    
    ONCE Macd1 = 12         //12
    ONCE Macd2 = 26         //26
    ONCE Macd3 = 9          //9
    
    //Contratti
    c = 1
    
    // Condizioni per entrare su posizioni long
    indicator1 = MACD[Macd1,Macd2,Macd3](close)
    c1 = (indicator1 >= 0)
    indicator2 = MACDline[Macd1,Macd2,Macd3](close)
    c2 = (indicator2 CROSSES OVER 3) //3
    
    IF c1 AND c2 THEN
    BUY c CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    indicator3 = MACD[Macd1,Macd2,Macd3](close)
    c3 = (indicator3 <= -4) //-4
    
    IF c3 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per entrare su posizioni Short
    indicator4 = MACD[Macd1,Macd1,Macd1](close)
    c4 = (indicator4 <= 0)
    indicator5 = MACDline[Macd1,Macd2,Macd3](close)
    c5 = (indicator5 CROSSES UNDER 9) //10
    
    IF c4 AND c5 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    indicator6 = MACD[Macd1,Macd2,Macd3](close)
    c6 = (indicator6 >= 6) //6
    
    IF c6 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
    
    // Loss, Profit
    SET STOP LOSS 13*AverageTrueRange[8](close) //13 - 10
    SET TARGET PROFIT 14*AverageTrueRange[13](close) //14 - 12

     

    #53317 quote
    keemax73
    Participant
    Average

    Alla stessa stregua nell’indicare il numero di contratti da acquistare con la variabile c 🙂

    Quello che cercavo è un trailing che sia efficace al posto del target profit,così da seguire il movimento, ma allo stesso tempo definire un numero di punti per poter impostare anche un stop profit se in guadagno al posto dello stop loss fisso.

    Può esistere un qualcosa del genere da applicare al mio codice ?

    Grazie per la tua disponibilità 🙂

    #53320 quote
    robertogozzi
    Moderator
    Master
    #53321 quote
    robertogozzi
    Moderator
    Master

    Ad ogni modo questa è la strategia come l’ho postata io sopra, a cui ho aggiunto il codice di Nicolas per il Trailing Stop:

    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    //DEFPARAM FLATBEFORE = 080000
    //DEFPARAM FLATAFTER = 220000
     
    ONCE Macd1 = 12         //12
    ONCE Macd2 = 26         //26
    ONCE Macd3 = 9          //9
     
    //Contratti
    c = 1
    
    //************************************************************************
    //trailing stop function
    trailingstart = 20 //trailing will start @trailinstart points profit
    trailingstep  =  5 //trailing step to move the "stoploss"
     
    //reset the stoploss value
    IF NOT ONMARKET THEN
     newSL=0
    ENDIF
     
    //manage long positions
    IF LONGONMARKET THEN
    //first move (breakeven)
     IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
      newSL = tradeprice(1)+trailingstep*pipsize
     ENDIF
    //next moves
     IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
      newSL = newSL+trailingstep*pipsize
     ENDIF
    ENDIF
     
    //manage short positions
    IF SHORTONMARKET THEN
    //first move (breakeven)
     IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
      newSL = tradeprice(1)-trailingstep*pipsize
     ENDIF
    //next moves
     IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
      newSL = newSL-trailingstep*pipsize
     ENDIF
    ENDIF
     
    //stop order to exit the positions
    IF newSL>0 THEN
     SELL AT newSL STOP
     EXITSHORT AT newSL STOP
    ENDIF
    //************************************************************************
    
    // Condizioni per entrare su posizioni long
    indicator1 = MACD[Macd1,Macd2,Macd3](close)
    c1 = (indicator1 >= 0)
    indicator2 = MACDline[Macd1,Macd2,Macd3](close)
    c2 = (indicator2 CROSSES OVER 3) //3
     
    IF c1 AND c2 THEN
    BUY c CONTRACT AT MARKET
    ENDIF
     
    // Condizioni per uscire da posizioni long
    indicator3 = MACD[Macd1,Macd2,Macd3](close)
    c3 = (indicator3 <= -4) //-4
     
    IF c3 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
     
    // Condizioni per entrare su posizioni Short
    indicator4 = MACD[Macd1,Macd1,Macd1](close)
    c4 = (indicator4 <= 0)
    indicator5 = MACDline[Macd1,Macd2,Macd3](close)
    c5 = (indicator5 CROSSES UNDER 9) //10
     
    IF c4 AND c5 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
     
    // Condizioni per uscire da posizioni long
    indicator6 = MACD[Macd1,Macd2,Macd3](close)
    c6 = (indicator6 >= 6) //6
     
    IF c6 THEN
    SELL c CONTRACT AT MARKET
    ENDIF
     
    // Loss, Profit
    SET STOP LOSS 13*AverageTrueRange[8](close) //13 - 10
    SET TARGET PROFIT 14*AverageTrueRange[13](close) //14 - 12

    Con trailingstart  indichi dopo quanti pips di profitto vuoi che parta il Trailing Stop (nell’esempio dopo 20 pips); se non raggiunge mai qual limite e torna indietro ti prenderà, ovviamente lo Stop Loss completo. Con trailingstep indichi ogni quanti pips di profitto il Trailing Stop deve essere aggiornato (nell’esempio sarà 20, 25, 30,…. di cinque in cinque). Tenere bene presente che essendo un codice che fa parte di una strategia sarà eseguito SOLO alla chiusura della candela, per cui se il prezzo ha raggiunto i 20 pips di profitto nel corso della candela, ma prima della chiusura è al di sotto, il Trailing Stop non partirà, per cui ti potrebbe capitare di arrivare a 19.9 pips di profitto, poi il prezzo gira e va a prenderti l’intero stop loss. Ovviamente questo problema può verificarsi maggiormente man mano che vai su timeframe più lunghi.

    #53322 quote
    keemax73
    Participant
    Average

    Ok, allora la domanda mi sorge spontanea.

    Se arrivo ad avere, 19.9 di guadagno e il trailing non entra in funzione, non c’è un modo dove io possa indicare dopo quanti punti in guadagno lo stop, inizialmente inserito, si posizioni almeno alla pari all’ingresso, così da proteggersi da un possibile rintracciamento dei prezzi ?

    non so se mi sono spiegato :))

    #53330 quote
    robertogozzi
    Moderator
    Master

    Ti sei spiegato benissimo, intendi il breakeven della posizione. Prendi il codice indicato al secondo link del mio post https://www.prorealcode.com/topic/problem-invio-codice-proorder/#post-53320 sopra ed inseriscilo nella tua strategia. Tieni sempre presente che, anch’esso, essendo un codice, verrà eseguito SOLO dopo la chiusura della barra.  

    #53343 quote
    keemax73
    Participant
    Average
    Perfetto proverò ad inserire il codice che mi hai indicato. Grazie 🙂 Provando il mio codice, però,  mi sono reso conto che per le posizioni long, si comporta abbastanza bene, mentre per le posizioni short, il codice non riesce a seguire il movimento. Eppure le condizioni di ingresso per il long che per lo short sono identiche. Si, c’è qualche ottimizzazione, ma in linea di massima si dovrebbero comportare allo stesso modo. Eppure così non è. Quindi, anche qui la domanda sorge spontanea. Finchè il mercato decide di salire, tutto bene. Ma nel momento in cui cambia direzione, sono rovinato. Il dax a cui faccio riferimento per il mio trading è in un periodo di salita e il sottostante, per ora,  non è stato violato. Ma se cambiano direzione ? Perchè il mio codice non riesce a seguire almeno in parte lo short ? Non dico che tute le tradate devono essere positive (altrimenti saremmo tutti ricchi), ma nemmeno tutte negative quando si tratta di scendere … Grazie ancora per la tua disponibilità.
    #53391 quote
    robertogozzi
    Moderator
    Master

    Probabilmente, essendo il DAX in fase di rialzo, necessita di settaggi diversi, anche per lo stesso indicatore, tra LONG e SHORT.

    Magari prova con il Macd così com’è per i LONG e creane un altro con valori diversi per gli SHORT, lo stesso puoi fare con le medie, ecc…

    Questo però potrebbe cambiare col tempo quando dovesse entrare, com’era a Giugno/Luglio/Agosto, in una fase ribassista.

    Purtroppo nessuna strategia funziona come si vorrebbe, il mercato, nonostante sia ciclico, nel breve periodo è comunque imprevedibile. I timeframe bassi, ovviamente, comportano un maggiore numero di falsi segnali.

    Solo col tempo e moltissime prove si possino affinare le strategie.

     

    #53404 quote
    keemax73
    Participant
    Average
    Ho inserito il codice che mi hai indicato, ma non mi sembra funzionare. Dove sto sbagliando ? Grazie.
    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    //DEFPARAM FLATBEFORE = 080000
    //DEFPARAM FLATAFTER = 220000
    
    startBreakeven = 35 //how much pips/points in gain to activate the breakeven function?
    PointsToKeep = 1 //how much pips/points to keep in profit above of below our entry price when the breakeven is activated (beware of spread)
    
    
    //Definizione variabili MACD Long
    ONCE Macd1 = 12                //12
    ONCE Macd2 = 26                //26
    ONCE Macd3 = 9                  //9
    
    //Definizione variabili MACD Short
    ONCE Macd4 = 12                //12
    ONCE Macd5 = 26                //26
    ONCE Macd6 = 9                  //9
    
    //Cross OVER
    ONCE crover = 3                 //3
    //Cross UNDER
    ONCE crunder = 9                //9
    
    //Exit Long
    ONCE exlong = 4                 //4
    //Exit Short
    ONCE exshort = 6                //6
    
    //Stop Loss
    ONCE stploss = 13               //13
    ONCE avrtrangeloss = 8          //8
    //Target Profit
    ONCE tarprof = 14               //14
    ONCE avrtrangeprofit = 13       //13
    
    //Contratti
    c = 1
    
    //reset the breakevenLevel when no trade are on market
    IF NOT ONMARKET THEN
    breakevenLevel=0
    ENDIF
    // --- BUY SIDE ---
    //test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = tradeprice(1)+PointsToKeep*pipsize
    ENDIF
     
    //place the new stop orders on market at breakevenLevel
    IF breakevenLevel>0 THEN
    SELL AT breakevenLevel STOP
    ENDIF
    // --- end of BUY SIDE ---
    
    // Condizioni per entrare su posizioni long
    indicator1 = MACD[Macd1,Macd2,Macd3](close)
    c1 = (indicator1 >= 0)
    indicator2 = MACDline[Macd1,Macd2,Macd3](close)
    c2 = (indicator2 CROSSES OVER crover) //3
    
    IF c1 AND c2 THEN
    BUY c CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    indicator3 = MACD[Macd1,Macd2,Macd3](close)
    c3 = (indicator3 <= -exlong) //-4
    
    IF c3 THEN
    SELL AT MARKET
    ENDIF
    
    // Condizioni per entrare su posizioni Short
    indicator4 = MACD[Macd4,Macd5,Macd6](close)
    c4 = (indicator4 <= 0)
    indicator5 = MACDline[Macd4,Macd5,Macd6](close)
    c5 = (indicator5 CROSSES UNDER crunder) //10
    
    IF c4 AND c5 THEN
    SELL AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    indicator6 = MACD[Macd4,Macd5,Macd6](close)
    c6 = (indicator6 >= exshort) //6
    
    IF c6 THEN
    SELL AT MARKET
    ENDIF
    
    // Loss, Profit
    SET STOP LOSS stploss*AverageTrueRange[avrtrangeloss](close) //8
    SET TARGET PROFIT tarprof*AverageTrueRange[avrtrangeprofit](close) //13
    
    #53409 quote
    robertogozzi
    Moderator
    Master

    Come puoi notare dal codice, quello nel link è solo per i LONG, nella stessa pagina, poco sotto, c’è un’aggiunta fatta da EDUARDO per gli SHORT. Comunque ti allego la versione completa:

    //******************************************************************************************************
    startBreakeven = 30    //30   pips in gain to activate the breakeven function?
    PointsToKeep   = 5     //5    pips to keep in profit above/below entry price when the breakeven is activated
    //
    //            test if the price have moved favourably of "startBreakeven" points already
    //reset the breakevenLevel when no trade are on market
    IF NOT ONMARKET THEN
       breakevenLevel=0
    ENDIF
    //
    // --- LONG  side
    IF LONGONMARKET AND (close - tradeprice(1)) >= (startBreakeven * pipsize) THEN
       breakevenLevel = tradeprice(1) + (PointsToKeep * pipsize) //calculate the breakevenLevel
       //place the new stop orders on market at breakevenLevel
       IF breakevenLevel > 0 THEN
           SELL AT breakevenLevel STOP
       ENDIF
    ENDIF
    // --- SHORT side
    IF SHORTONMARKET AND (tradeprice(1) - close) >= (startBreakeven * pipsize) THEN
       breakevenLevel = tradeprice(1) + (PointsToKeep * pipsize) //calculate the breakevenLevel
       //place the new stop orders on market at breakevenLevel
       IF breakevenLevel > 0 THEN
          EXITSHORT AT breakevenLevel STOP
       ENDIF
    ENDIF
    //******************************************************************************************************

     

    #53412 quote
    keemax73
    Participant
    Average
    Opss Sorry 🙁
    #53413 quote
    robertogozzi
    Moderator
    Master

    Mentre stavi scrivendo ho fatto una correzione.

    Rifai il copia e incolla.

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

Problem invio codice ProOrder


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
keemax73 @keemax73 Participant
Summary

This topic contains 35 replies,
has 2 voices, and was last updated by robertogozzi
8 years, 2 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 11/19/2017
Status: Active
Attachments: 9 files
Logo Logo
Loading...