Un bug nella funzione OrderSend() ?

 

Sto lottando da 4 giorni e non riesco a implementare una cosa apparentemente semplice. Ho fatto cose simili prima con diversi indicatori e candele. Non posso farlo con un orologio da polso.

L'essenza è primitiva! Non appena il prezzo si avvicina alla maschera di un certo periodo ad una certa distanza da i_thresholdFromMa (in questo EA è solo uno!), viene impostato un pennacchio. Ho già rimosso tutte le funzioni e i filtri che erano disponibili.

Ecco la funzione Buy:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
   
   if ((ND(OOP) - Ask) >= g_stopLevel)             // Проверка цену открытия на стоплевел          
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           Print("Bid = ", Bid);
           Print("Ask = ", Ask);
           Print("fastMa = ", fastMa);
           Print("Цена покупки = ", fastMa + buyHear * pt);
           Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}

Possiamo vedere che l'OrderSend() ha un prezzo di apertura uguale alla somma delle variabili fastMa + buyHear * pt

Nello screenshot, possiamo vedere che NON c'è questo prezzo!

Il giunto è nella mashka

Inoltre si può vedere che non ci sono voci, dove il prezzo ha toccato fastMa (marcatore rosso)

Ho deliberatamente preso il 1° buffer, cioè la penultima barra, per sapere con certezza che la penultima barra ha già chiuso e non ci sarà un'altra chiusura... Voglio evitare che l'ultima barra zero non venga riregistrata.

Questo è il messaggio dell'ordine:

ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);

È OOP:

double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
Come è possibile?
File:
test_ma_1.mq4  9 kb
 
hoz:

Sto lottando da 4 giorni e non riesco a implementare una cosa apparentemente semplice. Ho fatto cose simili prima con diversi indicatori e candele. Non posso farlo con un orologio da polso.

L'essenza è primitiva! Non appena il prezzo si avvicina alla maschera di un certo periodo ad una certa distanza da i_thresholdFromMa (in questo EA è solo uno!), viene impostato un pennacchio. Ho già rimosso tutte le funzioni e i filtri che erano disponibili.

Ecco la funzione Buy:

Possiamo vedere che l'OrderSend() ha un prezzo di apertura uguale alla somma delle variabili fastMa + buyHear * pt

Nello screenshot, possiamo vedere che NON c'è questo prezzo!

Inoltre si può vedere che non ci sono voci, dove il prezzo ha toccato fastMa (marcatore rosso)

Ho deliberatamente preso il 1° buffer, cioè la penultima barra, per sapere con certezza che la penultima barra ha già chiuso e non ci sarà un'altra chiusura... Volevo evitare che l'ultima barra 0 fosse riregistrata.

Ecco quindi il messaggio dell'ordine:

UN OOP:

Come è possibile?

Non hai ancora intenzione di portare i registri?
 
Vinin:

Non hai ancora intenzione di darmi i registri?


Ecco cosa c'è nei registri:

2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: open #3 buy stop 0.10 EURUSD at 1.31074 ok
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.3107
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: fastMa = 1.3097
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Ask = 1.3099
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Bid = 1.3099
2013.02.06 17:54:05     2011.01.12 14:32  Tester: order #2, buy 0.10 EURUSD is opened at 1.29876
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: open #2 buy stop 0.10 EURUSD at 1.29876 ok
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2988
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: fastMa = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Ask = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Bid = 1.2978
2013.02.06 17:54:05     2011.01.12 12:11  Tester: order #1, buy 0.10 EURUSD is opened at 1.29953
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: open #1 buy stop 0.10 EURUSD at 1.29953 ok
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2995
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: fastMa = 1.2985
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Ask = 1.2987
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Bid = 1.2986
2013.02.06 17:54:04     test_Ma_1 inputs: i_TF=0; i_fastMaPeriod=10; i_magic=3333021; i_thresholdFromMa=5; buyHear=10; SellHear=10; 

Cioè, se si crede ai registri, l'acquisto è dove dovrebbe essere. Se guardate lo screenshot, non c'è affatto... Lo screenshot qui sopra mostra che l'ordine pendente è nel posto sbagliato. 10 da fastMa non è nemmeno vicino...

 

Ciao, Victor! Si apre per me, ma perde. E si apre quando ho modificato un po' una linea:

   if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread))// Проверка цену открытия на стоплевел          
Aggiungi lo stesso per sall! Buona fortuna!
 
borilunad:

Ciao, Victor! Si apre per me, ma perde. Si apre quando ho modificato un po' una linea:

Vorrei aggiungere lo stesso per sall! Buona fortuna!


Ciao, Boris. Beh, si apre negli stessi posti di prima. Dove non si è aperto, ancora non si apre. Funziona molto stranamente su H1.

Sono passato a M15 e ho impostato la maschera su MODE_OPEN su 0(zero) bar.

In generale, se lo osserviamo, gli ordini pendenti sono posizionati dove necessario (intendo a M15 TF ), ma gli ordini pendenti non sono posizionati dove dovrebbero ovviamente aprirsi. Ecco uno screenshot per esempio:

Un'articolazione con le pause

borilunadi:

Ciao Victor! L'ho aperto, ma mi fa incazzare.

Boris, e sarà... Voglio dire, è solo la prima fase... La strada è lunga fino al traguardo. Tutte le condizioni verranno dopo, e saranno decise gradualmente. Per ora, abbiamo solo bisogno di risolvere le sfumature attuali.
 
hoz:


Ciao Boris. Beh, si apre negli stessi posti di prima. Dove non si è aperto, ancora non si apre. Funziona molto stranamente su H1.

Sono passato a M15 e ho impostato il polso su MODE_OPEN su 0(zero) bar.

In generale, se lo osserviamo, gli ordini pendenti sono collocati dove necessario (intendo su M15 TF ), ma gli ordini pendenti non sono collocati nei posti dove dovrebbero ovviamente aprirsi. Per esempio, ecco uno screenshot:

Boris, e lui... Voglio dire, è solo la prima fase... La strada è lunga fino al traguardo. Tutte le condizioni verranno dopo, e saranno decise gradualmente. Per ora, abbiamo solo bisogno di risolvere le sfumature attuali.

Victor, dovremmo studiare gli indicatori e i metodi del loro uso nell'EA. Mi sembra che tu voglia qualcosa che non sai come implementare.

E un'altra cosa, non bisogna fissarsi su condizioni molto rigide, perché il prezzo non si comporterà certamente come si vuole nella metà dei casi. Quindi bisogna immaginare cosa si potrebbe fare nei casi peggiori.

Francamente, non ho ancora capito perché sia importante per voi entrare su questa barra e non sull'altra. A mio parere, la cosa principale è identificare e utilizzare la tendenza che è iniziata nel tempo, piuttosto che un certo punto di ingresso. Provate a confrontare diversi Mashkeys, e poi imparate ad usarli come filtri di entrate indesiderate piuttosto che segnali per entrare, che spesso falliscono, e altri indicatori non sono migliori!

 
Prova a tracciare il valore di i_thresholdFromMa e t e osserva nel tester, e il risultato del confronto può anche essere tracciato lì
 
hoz:


Ecco cosa c'è nei registri:

Cioè, se si crede ai registri, l'acquisto è dove dovrebbe essere. Se guardate lo screenshot, non c'è affatto... Sopra ho dato uno screenshot, si può vedere che l'ordine pendente è nel posto sbagliato. Il 10 di fastMa non è neanche lontanamente vicino...


A giudicare dal log, la funzione OrderSend() piazza l'ordine correttamente, al prezzo che le hai passato
 

PapaYozh:



A giudicare dal log, la funzione OrderSend() piazza l'ordine correttamente, al prezzo che le hai passato

Sì!!!

10 da fastMa non è neanche lontanamente vicino...

Hai un set di 100 pips.

Altro screenshot, è corretto.

 
r772ra:

Sì!!!

10 da fastMa non è neanche lontanamente vicino...

Hai 100 p impostati.

un altro screenshot, tutto qui.


Rispetto alla 4 cifra è 10pp. E su quello a 5 cifre è 100pp. Cosa c'è di sbagliato in questo?
 
PapaYozh:

A giudicare dal log, la funzione OrderSend() piazza l'ordine correttamente, al prezzo che le hai passato


A giudicare dal registro, è corretto. Ma se si prova a farlo nel tester con le stesse impostazioni, gli ordini non vengono piazzati correttamente periodicamente, cosa che ho già detto. Questo è quello che ho scritto. Ho letto il registro, tutto è bello e chiaro... Guardando lo screenshot... (Quando guardo il grafico,noto che l'entrata di acquisto è un po' più bassa dell'entrata di acquisto... Questo è contrario alla condizione.

Ma è anche strano che non l'ho notato su M5, MA è stato notato che alcune voci sono mancate.