[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 779

 
ToLik_SRGV:

La funzione OrderSend ha i prezzi di apertura/impostazione sbagliati. Questo errore rende impossibile piazzare correttamente gli ordini, il che significa che l'EA vuole piazzare più ordini per qualche motivo, e non può farlo a causa di questo errore. Controlla se i prezzi degli ordini in sospeso sono normalizzati e se tutti gli ordini sono in posizione.

Se non ti dispiace guardarlo con il tuo occhio professionale, non c'è altro

File:
test_21_3.mq4  16 kb
 
FoxUA:

Se non vi dispiace guardarlo con l'occhio professionale, non c'è altro.

Lo spacchettamento ha mostrato che l'errore si verifica nel blocco per l'impostazione degli ordini pendenti, si sta cercando di impostarli a un prezzo negativo.

 
ToLik_SRGV:

Lo spacchettamento ha mostrato che l'errore si verifica nel blocco di impostazione degli ordini pendenti, stai cercando di metterli ad un prezzo negativo.


come si risolve, a parte battere la testa contro il muro ;) dove sono andato?

 
ToLik_SRGV:

Non secondo l'idea. Ecco un estratto da un libro di testo:

P.S.
A proposito di Petyka, cent'anni e ancora divertente :)))


"... così come i prezzi di stop-order dichiarati degli ordini di mercato che si trovano nella zona di congelamento...".

Si scopre, tuttavia, che questo ha un effetto... e bisogna tenerne conto - ho solo bisogno di rimuovere il livello di ordine stop annunciato su una posizione aperta... E se sei già entrato nella zona di congelamento, devi solo aspettare la chiusura... o un pullback...

Grazie, amico!!!

ZS. E riguardo a Petya - qui la situazione è la stessa... - Dico che metto 1.6 - funziona, metto 1.8 - non funziona... E anche 1.9 non aiuta!!! Che casino!!! È orribile. Ooh!
Quali sono i numeri? Litri o qualcosa del genere.

 
FoxUA:

Ehm, come si risolve, a parte sbattere la testa contro il muro ;) dove mi sono perso?

Riconosco le impronte delle funzioni di Kim... Vai al suo thread - ha uno script dopo ogni funzione per controllarla. Più chiaro di così non si può...
 
artmedia70:
Riconosco le impronte delle funzioni di Kim... Vai al suo ramo - ha uno script dopo ogni funzione per controllarla. Più chiaro di così non si può...


Sì, è dalla sua biblioteca che mi hanno dato qui, quindi sono gli stessi script che sono nella casella postale. e l'ho aggiunto così non c'è reazione

{SetOrder(sy, OP_BUYLIMIT, Lot*3, NormalizeDouble(PrAskLim, Digits), PrAskLim-StopLoss*po, PrAskLim+TakeProfit*po,mn);
    SetOrder(sy, OP_BUYSTOP,  Lot,   NormalizeDouble(PrAskSt, Digits),  PrAskSt-StopLoss*po,  PrAskSt+TakeProfit*po,mn);
    SetOrder(sy, OP_SELLLIMIT,Lot*3, NormalizeDouble(PrBidLim, Digits), PrBidLim+StopLoss*po, PrBidLim-TakeProfit*po,mn);
    SetOrder(sy, OP_SELLSTOP, Lot,   NormalizeDouble(PrBidSt, Digits),  PrBidSt+StopLoss*po,  PrBidSt-TakeProfit*po,mn);
     } 
 
FoxUA:

Um, come si cura questo, a parte sbattere la testa contro il muro ;) dove mi sono perso?

Andiamo avanti.
I numeri negativi entrano nelle variabili delle funzioni StopLossLastPos() e TakeProfitLastPos() . Lì appaiono a causa del fallimento del loro lavoro, cioè -1 è un segno di fallimento per ottenere l'ultimo valore di StopLoss e TakeProfit. Non controlli il successo dell'ottenimento degli ultimi valori, quindi -1 entra nel tuo lavoro come prezzo, poi da questo conti i valori per impostare gli ordini pendenti... e così via.

Il risultato è un effetto valanga e un mare di insetti. Ora nel tester vedrò come funziona e riferirò...


 
ToLik_SRGV:

Andare avanti.
I numeri negativi entrano nelle variabili delle funzioni StopLossLastPos() e TakeProfitLastPos() . Vi appaiono a causa di un fallimento, cioè -1 è un segno di fallimento per ottenere l'ultimo valore di StopLoss e TakeProfit. Non controlli il successo dell'ottenimento degli ultimi valori, quindi -1 entra nel tuo lavoro come prezzo, poi da questo si contano i valori per impostare gli ordini pendenti... e così via.

Il risultato è un effetto valanga e un mare di errori. Ora lo guarderò nel tester e riferirò...




Mi chiedo come sia possibile che sia così.

 
FoxUA:

Sì, mi chiedo come sia possibile che sia così.

Io chiudo.
L'errore è nella logica. È costruito intorno a due ordini di mercato. Ma qui abbiamo un punto sottile: la funzione OrdersTotal() restituisce non il numero totale di ordini di mercato aperti, ma tutti quelli che sono nel mercato, insieme agli ordini pendenti che sono impostati.
Di conseguenza, durante un commercio, c'è un momento in cui non ci sono ordini di mercato, al momento in cui gli ordini pendenti continuano a sospendere, cioè, OrdersTotal() restituisce più di 0, di conseguenza, il tuo blocco apertura ordini di mercato if(total_order==0), non possono aprire, Ma i nuovi ordini pendenti possono (nel momento in cui OrdersTotal() restituisce 2), ma poiché non ci sono ordini a mercato, le funzioni StopLossLastPos() e TakeProfitLastPos() restituiscono -1, mentre la condizione per aprire gli ordini pendenti è if(total_order==2), quindi catturano -1 e lo usano come prezzo.

 
ToLik_SRGV:

Io chiudo.
L'errore è nella logica. È costruito intorno a due ordini di mercato. Ma qui abbiamo un punto sottile: la funzione OrdersTotal() restituisce non il numero totale di ordini di mercato aperti, ma tutti quelli che sono nel mercato, insieme agli ordini pendenti che sono impostati.
Di conseguenza, durante un commercio, c'è un momento in cui non ci sono ordini di mercato, al momento in cui gli ordini pendenti continuano a sospendere, cioè, OrdersTotal() restituisce più di 0, di conseguenza, il tuo blocco apertura ordini di mercato if(total_order==0), non possono aprire, Ma i nuovi ordini pendenti possono (nel momento in cui OrdersTotal() restituisce 2), ma poiché non ci sono ordini a mercato, le funzioni StopLossLastPos() e TakeProfitLastPos() restituiscono -1, mentre la condizione per aprire gli ordini pendenti è if(total_order==2), quindi catturano -1 e lo usano come prezzo.


Ho capito, ora lo cambio. Grazie mille.