Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 302

 
mavar:

Salute! Oggi ho lanciato il mio primo EA in MT5!

La situazione giusta sul mercato è arrivata e l'Expert Advisor ha iniziato a comprare e comprare!!! Almeno sono riuscito a reagire in tempo. Puoi dirmi cosa c'è di sbagliato nel codice? Ho pensato che dovrebbe comprare solo un lotto e impostare immediatamente uno Stop Loss e un Take Profit. Non appena ha comprato qualcosa, la variabile Bye_opened dovrebbe diventare vera e non dovrebbe permettergli di fare un trade successivo fino a quando gli stop non sono scattati. Inoltre, come faccio a sapere il prezzo dell'ultimo trade per metterci degli stop?


Ma sembra che abbia fatto qualcosa di sbagliato. Per favore, fate notare il mio errore.

I tick possono arrivare più velocemente di quanto la posizione sia nella lista delle posizioni aperte. Quindi, il tuo assegno

if(PositionSelect(_Symbol)==true)

non funzionerà per un po', e durante questo tempo passeranno diverse voci. Si presume che il pezzo di codice di cui sopra si trovi nel gestore del tick.

 
pako:

mettere questo script nella cartella degli script, aprire questo script in unitor, compilarlo

Quando la borsa si apre, trascinate questo script sul grafico

Grazie per l'aiuto, l'ho capito da solo, tutto ha funzionato.
 
Buona sera a tutti, per favore condividete il codice per il trawl. Grazie.
 
PokrovMT5:
Buona sera a tutti, per favore condividete il codice per il trawl. Grazie.

Si prega di utilizzare la ricerca del sito - non è difficile:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

 
barabashkakvn:

Si prega di utilizzare la ricerca del sito - non è difficile:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

Grazie!
 
Dima_S:

I tick possono arrivare più velocemente di quanto la posizione sia nella lista degli aperti. Quindi, il tuo assegno

non funzionerà per un po' di tempo, e durante questo periodo ci saranno più voci. Si presume che il pezzo di codice di cui sopra si trovi nel gestore del tick.

Dima, il codice è nel blocco di elaborazione dei tick. Qual è il modo giusto per risolvere questo problema? Ho avuto lo stesso problema in QuickBooks, il robot spesso compra più di quanto dovrebbe. L'ho messo giù al suo secondo ritardo e ho semplicemente aggiunto una variabile separata che cambia quando le condizioni sono soddisfatte, ma ha avuto qualche problema anche lì. A volte l'ordine è stato rifiutato dalla borsa e la variabile aveva già il valore "deal" e il robot non ha scambiato.


Come risolvere correttamente il problema in MQL5 in modo che il robot compri un numero specificato di lotti ad una data condizione e non compri più del numero specificato di lotti finché non abbia venduto tutti i lotti che ha comprato?

 

Dobbiamo fare una pausa dopo l'acquisto per aspettare una risposta dallo scambio per essere sicuri?

Sleep(1000); //Ha messo in pausa?

 

Lo stop loss non si muove

scrive:

--Modifica ordine -> prezzo aperto:1.3111 BID :1.3121 sl 1.3109
fallito modifica ordine #3 comprare limite 1.00 a 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [fermate non valide]

--Modificare l'ordine <- risultato:10016

Perché?

void MoveStopLoss()
{
   ulong  ticket     = OrderGetTicket(0);
   double price      = OrderGetDouble(ORDER_PRICE_OPEN);
   double slossPrev  = OrderGetDouble(ORDER_SL);
   double sloss      = SymbolInfoDouble(_SYMBOL, SYMBOL_ASK) - SymbolInfoDouble(_SYMBOL, SYMBOL_POINT)*15;

      if (slossPrev < sloss)
      {
         MqlTradeRequest request={0};
         MqlTradeResult  result={0};
         request.action       = TRADE_ACTION_MODIFY;        // Тип выполняемого действия
         request.order        = ticket;                     // Тикет ордера (для модификации ордеров)
         request.price        = price;                      // Цена 
         request.sl           = sloss;                      // Уровень Stop Loss ордера
         request.tp           = 0;                          // Уровень Stop Loss ордера
         request.type_time    = ORDER_TIME_DAY;             // Тип ордера по времени действия
   
         Print ("--Modify order -> ", " price open:", price, " BID :", SymbolInfoDouble(_SYMBOL, SYMBOL_BID), " sl ", request.sl);
         bool ret = OrderSend (request, result);
         Print ("--Modify order <- результат:", result.retcode);      
      }
}
 
mq35:

Lo stop loss non si muove

scrive:

--Modifica ordine -> prezzo aperto:1.3111 BID :1.3121 sl 1.3109
fallito modifica ordine #3 comprare limite 1.00 a 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [fermate non valide]

--Modificare l'ordine <- risultato:10016

Perché?

Cercate di normalizzare il SL.
 

Normalizzare non aiuta. La stessa cosa, sop-perdita non è tirata su

--Crea ordine -> ASK:1.3121 prezzo:1.3111 sl 1.3106

comprare limite 1.00 EURUSD a 1.3111 (1.3121) sl: 1.3106 (1.3118 / 1.3121 / 1.3118)
--Crea l'ordine <- risultato:10009

--Modifica ordine -> prezzo aperto:1.3111 BID :1.3119 sl 1.3107
ordine modificato [#3 buy limit 1.00 EURUSD a 1.3111]

--Modificare l'ordine <- risultato:10009

--Modifica ordine -> prezzo aperto:1.3111 BID :1.312 sl 1.3108
ordine modificato [#3 buy limit 1.00 EURUSD a 1.3111]

--Modificare l'ordine <- risultato:10009

--Modifica ordine -> prezzo aperto:1.3111 BID :1.3121 sl 1.3109
fallito modifica ordine #3 comprare limite 1.00 a 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [fermate non valide]
--Modificare l'ordine <- risultato:10016