chiusure frazionate formula gozzi per 2 contratti

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #198871 quote
    romanelli4
    Participant
    Average

    buongiorno,

    ho un ts che entra con 3 contratti e gli chiedo di uscire un contratto alla volta

    1 contratto a 60 punti di gain, 1 a 90 ed l’ultimo a 130.

    dopo aver chiuso il primo metto lo stop in pari.

    ho usato delle stringhe di Roberto programmate per 2 contratti e non mi riesce farle funzionare per 3 contratti.

    il primo lo chiude correttamente, il secondo lo salta proprio ed il terzo lo chiude correttamente.

    mi chiude poi in pari il contratto rimasto aperto.

    allego foto

    grazie per l’aiuto

    Max

    If not OnMarket then
    Pareggio = 0
    Endif
    
    If ((TradePrice-close) >= 60* pipsize) and Pareggio = 0 then//60
    exitshort 1 contracts at Market
    Pareggio = 1
    Endif
    If Pareggio = 1 then
    exitshort at (TradePrice(3)-1*pipsize) Stop
    Endif
    //If shortOnMarket AND (tradeprice-close)>=60*pipsize THEN//90
    //exitshort 1 contract AT MARKET
    //ENDIF
    If shortOnMarket AND (tradeprice-close)>=90*pipsize THEN//90
    exitshort 1 contract AT MARKET
    ENDIF
    If shortOnMarket AND (tradeprice-close)>=130*pipsize THEN//130
    exitshort 1 contract AT MARKET
    ENDIF
    #198883 quote
    robertogozzi
    Moderator
    Master

    Perché scrivi TradePrice(3)?

    TradePrice(1)  dovrebbe, in teoria, essere la chiusura appena fatta di una posizione, in realtà credo che fino alla chiusura della barra non sia così, in quanto solo allora si saprà se l’ordine di uscita è andato a buon fine o no, quindi è il prezzo di ENTRATA.

    TradePrice(2) dovrebbe essere, quando funzionerà correttamente, il prezzo di uscita dell’ultima posizione dell’operazione precedente.

    TradePrice(3) dovrebbe essere, quando funzionerà correttamente, il prezzo di uscita della penultima posizione dell’operazione precedente.

    Aggiungi alla fine tuo codice le seguenti righe per osservare che prezzi ti vengono indicati:

    GraphOnPrice TradePrice(1) coloured(255,0,0,255) //Rosso
    GraphOnPrice TradePrice(2) coloured(0,128,0,155) //Verde
    GraphOnPrice TradePrice(2) coloured(0,0,255,255) //Blù
    #198899 quote
    romanelli4
    Participant
    Average

    grazie Roberto,

    ecco cosa fa:

    il tradeprice(1) fa si che chiuda correttamente il contratto 1 a 60pt di gain

    ma poi il contratto 2 da 90pt lo calcola non dal prezzo di entrata ma dalla chiusura a 60 pt per cui lo chiude a 60+90=150pt .

    mette anche lo stop a pareggio alla chiusura del contratto 1 a 60pt e non sulla apertura della posizione

    come si può risolvere?

    Max

    #198913 quote
    robertogozzi
    Moderator
    Master

    Se acquisti 3 contratti in un’unica volta puoi usare TradePrice(1), o solo TradePrice.

    Se, invece, accumuli 3 posizioni la cosa si complica. Non puoi scegliere te  quale contratto chiudere, ma ProOrder usa la regola FIFO, chiudendo sempre quello aperto per primo (il più vecchio), penso che sia quello che vuoi. Però devi tenere conto che dopo la prima chiusura parziale, scalano tutti di una posizione, perché TRADEPRICE è il prezzo dell’ultima operazione, che sia un’apertura o una chiusura.

    #198924 quote
    romanelli4
    Participant
    Average

    salve grazie Roberto

    ne vendo 3 tutti insieme

    ma non fa lo stesso

    vorrei

    vendere tre contratti ad x tutti insieme

    a 60 di gain ne chiude 1 e mette stop a pareggio su x

    a 90 di gain da x ne chiude un’altro e mantiene lo stop a pareggio su x

    a 130 di gain da x chiude l’utimo.

    vorrei riuscire a fare questo

    ma al momento non ci sono riuscito

    Un Saluto

    Max

    #198928 quote
    robertogozzi
    Moderator
    Master

    Non li vendi insieme, dal momento  che vuoi effettuare 3 uscite.

    Comunque interessa più se li acquisti insieme oppure no.

    #198939 quote
    romanelli4
    Participant
    Average
    if not shortonmarket and myResistenza and c1 and orario and c2 then
    mystop=high
    myprofit=open-50
    
    ENDIF
    // Condizioni per uscire da posizioni short
    If shortOnMarket AND close> mystop THEN
    exitshort AT MARKET
    ENDIF
    if myprofit then
    exitshort 1 contract at market
    endif
    ///---------------contratto 2--------------------------------
    if not shortonmarket and myResistenza and c1 and orario and c2 then
    mystop2=high
    myprofit2=open-70
    sellshort 1 CONTRACTS AT low[1]-1.4 limit
    
    endif
    // Condizioni per uscire da posizioni long
    If shortOnMarket AND close> mystop2 THEN
    exitshort AT MARKET
    ENDIF
    if myprofit2 then
    exitshort 1 contract at market
    ENDIF
    //---------------contratto 3----------------------------------
    if not shortonmarket and myResistenza and c1 and orario and c2 then
    mystop3=high
    myprofit3=open-90
    sellshort 1 CONTRACTS AT low[1]-1.4 limit
    
    endif
    // Condizioni per uscire da posizioni 
    If shortOnMarket AND close> mystop3 THEN
    exitshort AT MARKET
    ENDIF
    if myprofit3 then
    exitshort 1 contract at market
    ENDIF

    ho provato a venderli separati per chiuderli separati

    ma non funziona

    #198952 quote
    romanelli4
    Participant
    Average

    mancava una riga ma il risultato è il solito

    if not shortonmarket and myResistenza and c1 and orario and c2 then
    mystop=high
    myprofit=open-50
    sellshort 1 CONTRACTS AT low[1]-1.4 limit
    ENDIF
    // Condizioni per uscire da posizioni long
    If shortOnMarket AND close> mystop THEN
    exitshort AT MARKET
    ENDIF
    if myprofit then
    exitshort 1 contract at market
    endif
    ///---------------contratto 2--------------------------------
    if not shortonmarket and myResistenza and c1 and orario and c2 then
    mystop2=high
    myprofit2=open-70
    sellshort 1 CONTRACTS AT low[1]-1.4 limit
    
    endif
    // Condizioni per uscire da posizioni long
    If shortOnMarket AND close> mystop2 THEN
    exitshort AT MARKET
    ENDIF
    if myprofit2 then
    exitshort 1 contract at market
    ENDIF
    //---------------contratto 3----------------------------------
    if not shortonmarket and myResistenza and c1 and orario and c2 then
    mystop3=high
    myprofit3=open-90
    sellshort 1 CONTRACTS AT low[1]-1.4 limit
    endif
    // Condizioni per uscire da posizioni long
    If shortOnMarket AND close> mystop3 THEN
    exitshort AT MARKET
    ENDIF
    if myprofit3 then
    exitshort 1 contract at market
    ENDIF
    #198953 quote
    robertogozzi
    Moderator
    Master

    Il tuo esempio non posso provarlo, inoltre non capisco bene l’entrate separate e non so se c’è un TP ad uno SL.

    Questo esempio funziona con i valori di profitto indicati nel tuo primo post:

    IF close CROSSES UNDER average[200,0](close) AND Not OnMarket THEN
       SELLSHORT 3 contracts at Market
       set stop   pLoss   100
       set target pProfit 500
    ENDIF
    Pips = PositionPrice * PositionPerf / PipSize
    IF OnMarket THEN
       IF Pips >= 130 THEN     //Oltre 130 punti esci completamente
          ExitShort at Market
       ELSIF Pips >= 90 AND abs(CountOfPosition) = 2 THEN //Oltre i 90 punti esci una posizione (se era già uscito precedentemente di una)
          ExitShort 1 contract at Market
       ELSIF Pips >= 60 AND abs(CountOfPosition) = 3 THEN //Oltre i 30 punti chiudi una posizione (se ci sono sempre 3 contratti a mercato)
          ExitShort 1 contract at Market
       ENDIF
    ENDIF
    //
    graph Pips
    #198961 quote
    romanelli4
    Participant
    Average

    grazie innanzi tutto!

    ma non funziona

    ho cambiato i punti di gain in 30 60 80 per vedere bene il problema graficamente

    allego foto

    #198964 quote
    robertogozzi
    Moderator
    Master

    Il mio sistema con 3 contratti insieme funziona.

    #198971 quote
    robertogozzi
    Moderator
    Master

    Il tuo codice è un pò macchinoso e con alcune pecche logiche:

    1. sellshort 3 CONTRACTS AT low[1]-1.4 limit usa un ordine LIMIT, ma non è detto che il prezzo corrente sia per forza minore del minimo precedente, per cui dovresti verificare i due prezzi e usare LIMIT o STOP secondo il caso (se usi un tipo errato il broker fa entrate a mercato, oppure può rifiutare l’ordine ed interrompere la strategia)
    2. myprofit = open – 50 (come pure gli altri due calcoli) utilizzano OPEN, invece del prezzo corrente (CLOSE), ma se c’è stato un forte spike la candela potrebbe anche avere fatto più di 50 punti che in realtà si può trovare SOPRA il prezzo d’entrata ed avresti un profitto in negativo
    3. quando usi valori numerici da usare in espressioni dove ci sono dei prezzi (come nel caso di 1.4), converti i numeri in prezzo moltiplicandoli per PIPSIZE, quindi è logicamente corretto scrivere low[1] – 1.4 * pipsize; con indici come il DAX può risultare ininfluente, ma se provi la stessa strategia su EUR/USD ottieni prezzi negativi (1.03 – 1.4)
    4. la riga 10, if myprofit then, è sempre vera, perché contiene un prezzo (qualunque esso sia) ed è quindi SEMPRE <> 0, quindi ha un valore logico vero, per cui appena entra a mercato esce.

    Macchinoso perché puoi acuistare 3 contratti insieme, invece di fare 3 acquisti separatamente (che in ogni caso vengono raggruppati, perché gli ordini NON vengono eseguiti all’istante, ma solo alla fine del codice, quindi ProOrder li aggrega).

    Io ho provato a riscriverlo cercando di seguire quanto più possibile le tue impostazioni e adattando i parametri al DAX, 15 minuti, con 15K unità sul grafico:

    ONCE c1      = 0
    myResistenza = 1
    c2           = 1
    Orario       = 1
    IF close CROSSES UNDER average[200,0](close) AND Not ShortOnMarket THEN
    c1 = 1
    ENDIF
    //
    if not shortonmarket and myResistenza and c1 and orario and c2 then
    Entrata   = min(low,low[1]) - 20.0 * PipSize
    mystop    = max(high,high[1])
    myprofit  = max(open,close) - 30   * PipSize
    myprofit2 = max(open,close) - 60   * PipSize
    myprofit3 = max(open,close) - 180  * PipSize
    IF close > Entrata THEN
    sellshort 3 CONTRACTS AT Entrata stop
    ELSIF close < Entrata THEN
    sellshort 3 CONTRACTS AT Entrata limit
    ENDIF
    ENDIF
    // Uscita in Stop
    If ShortOnMarket AND close >= mystop THEN
    exitshort AT MARKET
    ENDIF
    // Condizioni per uscire da posizioni short
    IF ShortOnMarket THEN
    c1 = 0
    IF close <= myprofit3 THEN
    ExitShort at Market
    ELSIF close <= myprofit2 AND abs(CountOfPosition) = 2 THEN
    ExitShort 1 contract at Market
    ELSIF close <= myprofit AND abs(CountOfPosition) = 3 THEN
    ExitShort 1 contract at Market
    ENDIF
    ENDIF
    effegi thanked this post
    #198974 quote
    romanelli4
    Participant
    Average

    Roberto grazie mille davvero,

    ci lavoro con calma

    intanto buon ferragosto!!!!

    Max

    robertogozzi thanked this post
Viewing 13 posts - 1 through 13 (of 13 total)
  • You must be logged in to reply to this topic.

chiusure frazionate formula gozzi per 2 contratti


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
romanelli4 @romanelli4 Participant
Summary

This topic contains 12 replies,
has 2 voices, and was last updated by romanelli4
3 years, 6 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 08/10/2022
Status: Active
Attachments: 6 files
Logo Logo
Loading...