Codice martingala manuale

Viewing 9 posts - 31 through 39 (of 39 total)
  • Author
    Posts
  • #194456 quote
    MauroPro
    Participant
    Veteran

    ecco il codice:

    defParam cumulateOrders = false //(test DAX 15m)
    once orderSize = 1
    once raddoppio = 1
    
    if StrategyProfit > StrategyProfit[1]and StrategyProfit[1] > StrategyProfit[2] then
    IF Raddoppio = 1 THEN
    orderSize = orderSize * 2
    Raddoppio = 0
    ELSE
    orderSize = 1
    ENDIF
    elsif StrategyProfit < StrategyProfit[1] THEN
    orderSize = 1
    Raddoppio = 1
    endif
    
    //--------------
    avg50 = average[50,0](close)
     
    if close crosses over avg50 then
    buy orderSize contract at market
    endif
     
    if longOnMarket and close < (avg50 - 50*pointSize) then
    sell orderSize contract at market
    endif
    //-------------------------------------
    set target pProfit 500
    set stop   pLoss   200
    //--------------------------------------------
    graph ordersize                          coloured(255,0,0,255)
    graph Raddoppio                          coloured(0,0,255,255)
    graph StrategyProfit < StrategyProfit[1] coloured(0,0,0,150)
    
    #194459 quote
    robertogozzi
    Moderator
    Master

    Fino a venerdì mattina non riuscirò a modificarlo,

    #194461 quote
    MauroPro
    Participant
    Veteran

    Grazie Roberto, fai con tutta calma non c’è nessuna fretta.

    #194524 quote
    MauroPro
    Participant
    Veteran

    Per Phoentzs:

    guardando il codice di Roberto per operazioni Martingala con il raddoppio della posizione soltanto una volta dopo la prima perdita, sono riuscito a riscrivere tale codice con la tua formula.

    Ecco la sintesi (anche per altri utenti interessati) dei due codici: A ) raddoppio della posizione dopo la prima perdita e mantenimento del raddoppio fino ad una nuova operazione positiva  –  B) raddoppio della posizione soltanto una volta dopo la prima perdita

    A)

    defParam cumulateOrders = false 
    once positionSize = 1                                //starting number of contracts
    once minPositionSize = 1                         //minimum lot size required by the broker
    once maxPositionSize = 2                       
    once increase    = 1                                  //number of lots to increment
    //once decrease    = 1                                 //number of lots to decrement
    if strategyProfit > strategyProfit[1] then      
    positionSize = positionSize – increase                     
    elsIf strategyProfit < strategyProfit[1] then         
    positionSize = positionSize + increase                   
    endif
    positionSize = min(maxPositionSize, max(minPositionSize,positionSize))  //check both maximum and minimum
    

     

    B)

    defParam cumulateOrders = false
    once positionSize = 1
    once minPositionSize = 1
    once maxPositionSize = 2
    once increase    = 1
    // once decrease = 1
    once flag = 1
    if strategyProfit > strategyProfit[1] then
    positionSize = positionSize - increase
    flag = 1
    elsIf strategyProfit < strategyProfit[1] then
    if flag = 1 then
    positionSize = positionSize + increase
    flag = 0
    else
    positionSize = minPositionSize
    endif
    endif
    positionSize = min(maxPositionSize, max(minPositionSize,positionSize))

    Per Roberto:

    sono riuscito a scrivermi il codice che ti avevo chiesto, grazie comunque per la disponibilità. Ti volevo invece chiedere una cosa didattica: come mai non si può utilizzare in questi codici per determinare un operazione negativa-positiva: positionPerf?

    Strattegyprofit < strategyProfit[1] mi indica che il totale della strategia è minore rispetto al totale della strategia riferito all’operazione precedente, quindi c’è stata un operazione negativa-una perdita. Tuttavia per indicare che l’operazione precedente è stata negativa spesso, in altri codici scrivo e funziona,: if positionPerf(1) < 0 …

    Come mai qui non va bene? (positionPerf era usato anche nella formula del manuale del resto)

    phoentzs thanked this post
    #194527 quote
    phoentzs
    Participant
    Master

    Grazie Mauro, lo confronterò con la mia versione del codice nelle mie strategie quando ne avrò la possibilità.
    Ho anche un codice simile da qualche parte in cui un MA è mappato sulla curva della strategia e la gestione del denaro funziona su di esso. Se siete interessati?

    #194539 quote
    robertogozzi
    Moderator
    Master

    StrategyProfit restituisce il totale progressivo delle operazioni CHIUSE.

    PositionPerf restituisce la percentuale di guadagno (o perdita, se è un valore negativo) dell’operazione aperta.

    Quando un’operazione viene chiusa StrategyProfit viene aggiornata e PositionPerf azzerata. Quando si apre un’operazione, StrategyProfit resta invariara com’era prima e viene aggiornata PositionPerf candela per candela.

    Sono due cose diverse, se t’interessa il totale basta che tu sommi le due ed avrai il totale acquisito + il totale corrente (temporaneo).

    Per vedere se la tua strategia è storicamente profittevole o meno devi controllare StrategyProfit.

    Per vedere, invece, se è l’operazione corrente è profittevole devi controllare PositionPerf.

    StrategyProfit è espressa nella valuta del tuo conto.

    PositionPerf può essere usata in questi modi:

    • IF PositionPerf > 0 THEN                                                                                                        per verificare che l’operazione aperta sia in profitto
    • PerCent = PositionPerf  * 100                                                                                                 per conoscere la percentuale in forma % (per default non è rapportata a 100)
    • Pips        = PositionPerf * PositionPrice / PipSize  / PipValue                                             per conoscere il profitto (o la perdita, se il dato è negativo) espresso in PIPS (ad esempio 42 pips)
    • Pips        = PositionPerf * PositionPrice / PipSize / / PipValue / abs(CountOfPosition) per conoscere il profitto (o la perdita, se il dato è negativo) espresso in PIPS, ma diviso per il numero di posizioni aperte (ad esempio 21 pips se sei in guadagno di 42 pips con 2 contratti)
    • Money   = PositionPerf * PositionPrice                                                                                   per conoscere il guadfagno (o la perdita) espressa in unità valutarie delle strumento su cui stai operando
    MauroPro thanked this post
    #194581 quote
    MauroPro
    Participant
    Veteran

    Ciao Phoentzs se hai qualche codice che pensi sia valido postalo pure!

     

    Ciao Roberto, ho integrato la tua risposta esaustiva alle varie annotazioni che mi ero fatto nel tempo di strategyProfit e positioPerf.

    Non capisco però ancora una cosa: se al codice basta distinguere un operazione vincente da una perdente, questo non è fattibile in entrambi i modi:

    strategyProfit > strategyProfit [1] mi dice che il totale progressivo dell’ultima operazione chiusa è maggiore rispetto al totale progressivo della penultima operazione chiusa: ossia che c’è stata un operazione positiva (che è quello che serve al codice)

    Ma anche positionPerf(1) > 0 mi dice che l’ultima operazione è stata positiva [se invece uso positionPerf nel secondo modo, es: positionPerf(0) > 0.1 allora mi riferisco al guadagno specifico dell’ultima operazione ancora aperta]

    Probabilmete c’è ancora qualcosa che mi sfugge.

    #194583 quote
    robertogozzi
    Moderator
    Master

    positionPerf(1) ti restituisce la performance dell’operazione precedente.Forsse convertendola in moneta è uguale alla differenza di StrategyProfit, ma non l’ho verificato.

    #194584 quote
    MauroPro
    Participant
    Veteran

    Secondo me è possibile in qualche modo: in un tuo vecchio appunto che mi ero segnato scrivevi:

    “PositionPerf restituisce l’andamento di una posizione aperta, in percentuale sul prezzo. Generalmente si usa non tanto per sapere quant’è il guadagno (basta comunque fare la percentuale sul prezzo d’entrata per saperlo), quanto se è in profitto(>0) oppure in perdita(<0)”

    In effetti questo usa va bene, ricordo un mio vecchio codice che avevo provato per variare lo stop in base ad un op vincente o perdente ed andava bene positionPerf, il codice era questo:

    if  positionPerf (1) <0 and positionPerf(2) <0 then

    set stop % loss 2

    else

    set stop %loss 1

    endif

    Quando hai tempo prova a fare la conversione che dicevi è interessante. CIAO

Viewing 9 posts - 31 through 39 (of 39 total)
  • You must be logged in to reply to this topic.

Codice martingala manuale


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
MauroPro @mauropro Participant
Summary

This topic contains 38 replies,
has 3 voices, and was last updated by MauroPro
3 years, 8 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 05/30/2022
Status: Active
Attachments: 5 files
Logo Logo
Loading...