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

 

Saluti a tutti, ho scaricato Owl, nel tester tutto è normale e vende e compra, l'ho messo sulla demo in Alpari, solo buys.....

Forse manca qualcosa lì? Non so come funzionerebbe....

/* decompilato cancellato */

 

Voglio che il mio Expert Advisor compri quando il prezzo è vicino al prezzo della maschera + rientroi_thresholdFromMa. L'ho scritto così per una posizione lunga:

bool OpenBuy(double fastMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   if (High[0] == fastMa || Low[0] == fastMa)
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

Il valore difastMa viene passato attraverso i parametri della funzione. Poi confronto i valori della corrente alta e bassa con il valore della corsaveloceMa veloce.

Se il valore di high o low è uguale al valore della valvolafastMa , allora logicamente un ordine dovrebbe essere aperto al prezzo (valore della valvolafastMa+ offset da essai_thresholdFromMa).

La funzione non funziona. Qual è la ragione? L'Expert Advisor non invia alcun errore al giornale.

 
hoz:

Voglio che il mio Expert Advisor compri quando il prezzo è vicino al prezzo della maschera + rientroi_thresholdFromMa. L'ho scritto così per una posizione lunga:

Il valore difastMa viene passato attraverso i parametri della funzione. Poi confronto i valori della corrente alta e bassa con il valore della corsaveloceMa veloce.

Se il valore di high o low è uguale al valore della valvolafastMa , allora logicamente un ordine dovrebbe essere aperto al prezzo (valore della valvolafastMa+ offset da essai_thresholdFromMa).

La funzione non funziona. Qual è la ragione? L'Expert Advisor non invia alcun errore al giornale.

Buonasera, siete nel cuore della notte!

Le uguaglianze tra frazioni non saranno mai fissate! Le zecche scivoleranno e non ci sarà alcun segnale. Ecco perché è meglio così:

   if (High[0] >= fastMa && Low[0] <= fastMa)
 

Sono d'accordo con Boris, ma vorrei anche aggiungere che qualsiasi confronto di prezzi è meglio farlo come segue

non Bid>fastMA ma Bid-fastMA>Zero

Non High[0]>=fastMA , ma High[0]-fastMA>-Zero , e così via:)

Nella sezione globale:

#define Zero 0.00000001 , o qualcosa di simile.

 
tara:

Sono d'accordo con Boris, ma vorrei aggiungere che qualsiasi confronto di prezzi è meglio farlo come segue

non Bid>fastMA ma Bid-fastMA>Zero

Non High[0]>=fastMA , ma High[0]-fastMA>-Zero , e così via:)

Nella sezione globale:

#define Zero 0.00000001 , o qualcosa di simile.

E sono d'accordo con Alexei, ma non sono entrato nei dettagli, ho solo corretto l'evidente scorrettezza! Il resto si troverà tutto controllando, assaggiando a proprio gusto.
 

Alexey e Boris vi ringraziano per il vostro prezioso commento.

#define Zero 0.00000001 , penso che sarebbe molto piccolo :) Suppongo che si possa tranquillamente mettere mezzo punto qui o un punto di spread...

 
hoz:

Alexey e Boris vi ringraziano per il vostro prezioso commento.

#define Zero 0.00000001 , penso che sarebbe molto piccolo :) Suppongo che si possa tranquillamente mettere mezzo punto qui o un punto di spread...

Prova a mettere una variabile al posto di Zero ed è così che determini la spaziatura necessaria! E molto probabilmente dovrete lasciarlo, perché il suo valore cambierà a seconda dello stato del mercato.
 
borilunad:
Prova a mettere una variabile al posto di Zero ed è così che definisci il gioco necessario! E molto probabilmente dovreste lasciarlo, perché il suo valore cambierà a seconda dello stato del mercato.


Sì, se c'è una variabile, dovremmo testarla e osservare i risultati del mercato. Nel frattempo, lo sto scrivendo per eseguirlo nel tester e identificare i punti di forza e di debolezza del mio TS.

Questa è la mia logica:

bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   //if (High[0] == fastMa || Low[0] == fastMa)
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

Ho messo 1 al posto del gioco variabile per ora per il test, poi lo sposterò su quello esterno.

Da quanto ho capito sarà la variante più corretta. Se il prezzo tocca la barra o no, sarà importante ottenere un segnale. La candela ha due estremità (alta e bassa). Significa che controlliamo i suoi 2 estremi. Ecco perché ho scritto che il divario è più corto di 1.

Ma mi chiedo se si apre alla distanza dii_thresholdFromMa(rientro), cioè non dal polso, ma dall'estremità della candela.

Vi chiederò di non prestare attenzione alla condizione per entrare nella funzione di apertura, naturalmente la includerò nella funzione di segnalazione.

Ecco uno screenshot, per esempio,

Screenshot del momento

La palla rossa è fastMA.i_thresholdFromMa(rientro dall'ondulazione) è 5 nelle variabili esterne. Tutte le altre condizioni sono comprate. Qui vediamo 2 ordini di stop blu sotto il fastMa rosso. Non vedo alcuna logica qui. L'ordine è inviato precisamente al prezzoND(fastMa + i_thresholdFromMa * pt) e posso vederlo nella funzione data...

 
hoz:


Sì, se variabile, dovrebbe essere testato e osservato sul mercato, che tipo di risultati mostra. Nel frattempo, sto scrivendo questo per eseguirlo nel tester e identificare i punti di forza e di debolezza del TS.

Questa è la mia logica:

Ho messo 1 al posto del gioco variabile per ora per il test, poi lo sposterò su quello esterno.

Come ho capito sarà la variante più corretta. Se il prezzo tocca la barra o no, sarà importante ottenere un segnale. La candela ha due estremità (alta e bassa). Significa che controlliamo i suoi 2 estremi. Ecco perché ho scritto che il divario è più corto di 1.

Ma mi chiedo se si apre alla distanza dii_thresholdFromMa(rientro), cioè non dal polso, ma dall'estremità della candela.

Vi chiederò di non prestare attenzione alla condizione per entrare nella funzione di apertura, naturalmente la includerò nella funzione di segnalazione.

Ecco uno screenshot, per esempio,

Il segno di spunta rosso è fastMA.i_thresholdFromMa(rientro dall'ondulazione) è 5 nelle variabili esterne. In tutte le condizioni il resto sono acquisti. Qui vediamo 2 ordini di stop blu sotto il fastMa rosso. Non vedo alcuna logica qui. L'ordine viene inviato esattamente al prezzoND(fastMa + i_thresholdFromMa * pt) e posso vederlo nella funzione data...

Se volete che la posizione si apra prima, nel mezzo di una barra, dovete specificare Low bar per il Bai e High bar per il Sall.

   if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла
   
 
borilunad:

Se volete che la posizione si apra prima, nel mezzo di una barra, dovete specificare Low bar per il Bai e High bar per il Sall.

if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла


Beh, non c'è bisogno di farlo prima. Non so da quale lato la candela si avvicina alla maschera. Sopra o sotto. Questa è la domanda. Ecco perché è inappropriato. Non è vero?

Comunque, il prezzo aperto nella mia funzione OrderSend() è diverso e comunque è più alto della maschera:

Qui stampo i valori della funzione:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
   {
       if ((fastMa + i_thresholdFromMa * pt) > Ask)            // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
      Print("fastMa = ", DoubleToStr(fastMa,Digits));
      Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
      Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
   }
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

Questo è ciò che mostra il registro:

2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #110 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #109 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #108 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:14     D_Aleks_first_pattern EURUSD,H1: loaded successfully

È ovvio, il prezzo di apertura dovrebbe essere fissato da me. Siete stati calcolati. Uno scarto viene aggiunto al valore della macchina. E si può vedere nella stampa...