Ingresso sui minimi delle candele precedenti

Viewing 9 posts - 1 through 9 (of 9 total)
  • Author
    Posts
  • #182256 quote
    elfunambolo
    Participant
    New

    Salve, vorrei entrare a mercato al superamento dei minimi delle 2 candele precedenti. Ho scritto il codice qui sotto, però gli ordini vengono immessi anche se la condizione non è verificata. Ho sbagliato qualcosa nel codice?

    Grazie per il supporto

     

    DEFPARAM CumulateOrders = False
    
    // Regole d'ingresso
    IF NOT OnMarket AND Low < Lowest[2] THEN
    BUY 1 SHARES AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    If LongOnMarket AND CurrentHour = 23 THEN
    SELL AT MARKET
    ENDIF
    
    
    // Stop loss e take profit: Inserisci qui i tuoi stop di protezione e profit target
    SET STOP $LOSS 40
    SET TARGET $PROFIT 50
    #182259 quote
    robertogozzi
    Moderator
    Master

    Tieni presente che LOWEST non ti restituisce il prezzo minimo, ma il minimo di QUALUNQUE cosa sia inicata tra parentesi tonde, subito dopo le quadre. Per difetto PRT usa CLOSE quando non viene indicato niente (come nel tuo caso), da qui l’errore (il primo, poi ce n’è un altro), quindi devi scrivere:

    Lowest[2](low)

    Il secondo errore è che il MINIMO non può MAI essere inferiore a se stesso. Siccome tu prendi in considerazione le ultime due candele, quella corrente e quella precedente, la condizione (dopo che avrai fatto quanto indicato nella prima parte, sopra) non sarà MAI verificata. Devi fare riferimento alle due candele PRECEDENTI, per cui devi scrivere:

    Lowest[2](low[1])
    #182262 quote
    elfunambolo
    Participant
    New

    Ok grazie ho capito adesso. Per quanto riguarda il livello di ingresso vorrei inserire un ordine Buy limite allo stesso prezzo su cui faccio la verifica. Ho scritto questo codice, ma vedo che l’ordine entra all’apertura della candela. Ho sbagliato qualcosa?

    Grazie per il supporto

    DEFPARAM CumulateOrders = False
    
    // Regole d'ingresso
    IF NOT OnMarket AND Low < Lowest[2](low[1]) THEN
    BUY 1 SHARES AT Lowest[2](low[1]) LIMIT
    ENDIF
    
    // Condizioni per uscire da posizioni long
    If LongOnMarket AND CurrentHour = 23 THEN
    SELL AT MARKET
    ENDIF
    
    
    // Stop loss e take profit: Inserisci qui i tuoi stop di protezione e profit target
    SET STOP $LOSS 40
    SET TARGET $PROFIT 50
    #182265 quote
    robertogozzi
    Moderator
    Master

    Alla riga 5 devi usare STOP, non Limit, perché acquisti ad un prezzo maggiore rispetto a quello corrente.

    Dovresti anche verificare che il prezzo a cui vuoi entrare sia ad una distanza maggiore, o uguale, al minimo richiesto da IG per lo strumento su cui operi.

    78BD2583-ADAA-4892-8727-D05D4733F6E3.jpeg 78BD2583-ADAA-4892-8727-D05D4733F6E3.jpeg
    #182271 quote
    elfunambolo
    Participant
    New

    Nel caso che ho disegnato qui sotto però il prezzo corrente è maggiore rispetto a quello dell’ordine pendente. Va bene sempre inserire un ordine BUY Stop o va scritto un codice diverso che prenda in considerazione tutte e due le casistiche?

    Grazie

    Schermata-2021-11-25-alle-16.53.24.png Schermata-2021-11-25-alle-16.53.24.png
    #182280 quote
    elfunambolo
    Participant
    New

    Ho risolto scrivendo il codice sotto e aggiunto la durata dell’ordine pendente a 92 candele successive.

    Mi rimane il problema di verificare nel ciclo IF se ho già inserito un ordine pendente, altrimenti a fine candela l’ordine pendente precedentemente inserito può essere modificato da un nuovo ordine pendente.

    Come posso inserire questa verifica?

    Grazie

    DEFPARAM CumulateOrders = False
    
    // Definizione della durata di validità dell'ordine in questo caso 92 con barre da 15 min per coprire la giornata
    ONCE NbBarLimit = 92
    
    
    // Regole d'ingresso per ordine STOP (prezzo attuale < Lowest)
    IF NOT OnMarket AND Low < Lowest[2](low[1]) AND Close <= Lowest[2](low[1]) THEN
    // definiamo la variabile "MyStopBuy" e "MyIndex"
    MyStopBuy = Lowest[2](low[1])
    MyIndex = Barindex
    ENDIF
    
    //verifico se la barra attuale è oltre la finestra di validità del ordine pendente
    IF BarIndex >= MyIndex + NbBarLimit THEN
    MyStopBuy = 0
    ENDIF
    
    IF MyStopBuy > 0 AND NOT OnMarket THEN
    BUY 1 SHARES AT MyStopBuy STOP
    ENDIF
    
    //Regole d'ingresso per ordine LIMIT (prezzo attuale > Lowest)
    IF NOT OnMarket AND Low < Lowest[2](low[1]) AND Close > Lowest[2](low[1]) THEN
    MyLimitBuy = Lowest[2](low[1])
    MyIndex = Barindex
    ENDIF
    
    //verifico se la barra attuale è oltre la finestra di validità del ordine pendente
    IF BarIndex >= MyIndex + NbBarLimit THEN
    MyLimitBuy = 0
    ENDIF
    
    IF MyLimitBuy > 0 AND NOT OnMarket THEN
    BUY 1 SHARES AT Lowest[2](low[1]) LIMIT
    
    ENDIF
    
    // Condizioni per uscire da posizioni long
    If  OnMarket AND CurrentHour = 23 THEN
    SELL AT MARKET
    ENDIF
    
    
    // Stop loss e take profit: Inserisci qui i tuoi stop di protezione e profit target
    SET STOP $LOSS 40
    SET TARGET $PROFIT 50
    #182281 quote
    robertogozzi
    Moderator
    Master

    Non preoccuparti dell’ordine pendente, è l’opposto di quello che credi.

    Gli ordini pendenti scadono SEMPRE alla chiusura di ogni barra, quindi ogni barra devi piazzarli di nuovo, se ci sono ancora le condizioni.

    #182284 quote
    elfunambolo
    Participant
    New

    Io vorrei che il primo ordine pendente immesso rimanesse in macchina per le prossime n candele (senza essere cancellato/sostituito) è possibile codificare questa condizione?

    Grazie

    #182294 quote
    robertogozzi
    Moderator
    Master

    Basta che per N candele tu ripeta l’ordine pendente.

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

Ingresso sui minimi delle candele precedenti


ProOrder: Trading Automatico & Backtesting

New Reply
Author
Summary

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

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 11/25/2021
Status: Active
Attachments: 2 files
Logo Logo
Loading...