Buonasera a tutti! Ho deciso di mettere una traccia sui trade aperti nel tester, ho provato a passare attraverso OrderGet....() e mi sono accorto che l'affare è passato dalla categoria degli ordini a una posizione aperta, rispettivamente sono passato attraverso PositionGet....(), ma di nuovo non funziona niente,
La domanda è se devo usare ora HistoryDealGet...() ? O non capisco qualcosa? Quale strada seguire per modificare SL in open trade nel tester? Grazie in anticipo per i commenti.
Per favore indirizzatemi a !!!! come implementare in MQL5 il controllo della presenza (o assenza) di un oggetto grafico, per esempio una linea di tendenza o una linea verticale?
Idealmente, vorrei usare una logica simile a "Se l'ordine non esiste" o "Se l'ordine esiste".
Per favore indirizzatemi a !!!! come implementare in MQL5 il controllo della presenza (o assenza) di un oggetto grafico, per esempio una linea di tendenza o una linea verticale?
Idealmente, vorrei usare una logica simile a "Se l'ordine non esiste" o "Se l'ordine esiste".
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Puoi consigliare come implementare correttamente l'algoritmo di acquisto?
Al momento, l'Expert Advisor deve comprare molte volte, finché non riceve l'informazione che ci sono posizioni aperte, e rimane indietro. Come fare in modo che l'Expert Advisor aspetti la risposta della borsa dopo il primo acquisto (quando arrivano le condizioni).
Il problema ora è che la variabile Bye_opened dovrebbe diventare vera e questo dovrebbe impedire all'EA di fare operazioni inutili fino a quando gli stop non vengono attivati. Ma cambiare la variabile Bye_opened richiede molto tempoe l'EA ha il tempo di fare diversi trade.
Cosa manca nel mio codice? Si prega di indicare le carenze.
//--- Do we have positions opened already?bool Buy_opened=false; // variable to hold the result of Buy opened positionbool Sell_opened=false; // variables to hold the result of Sell opened positionif(PositionSelect(_Symbol)==true) // we have an opened position
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //It is a Buy
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // It is a Sell
}
}
//+------------------------------------------------------------------+//| СОВЕРШАЕМ СДЕЛКУ |//+------------------------------------------------------------------+if(last_tick.last < BBLow[2] && Buy_opened == false)
{
int znak = last_tick.last - BBLow[2];
//--- 1. Создать запросMqlTradeRequest Trade_reqst={0}; // Инициализация структуры торгового запроса
Trade_reqst.action=TRADE_ACTION_DEAL; // Тип: немедленное совершение сделки
Trade_reqst.symbol=_Symbol; // Инструмент: текущий
Trade_reqst.volume=Lot; // Объём: 1 лот
Trade_reqst.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK)-TakeProfit*_Point; // Цена исполнения
Trade_reqst.type=ORDER_TYPE_BUY; // Тип ордера: на продажу
Trade_reqst.type_filling=ORDER_FILLING_RETURN; // Политика исполнения
Trade_reqst.sl=last_tick.last - StopLoss * _Point; // Stop Loss
Trade_reqst.tp=SymbolInfoDouble(_Symbol,SYMBOL_ASK) + TakeProfit * _Point; // Take Profit// Trade_reqst.tp=Trade_reqst.price + TakeProfit * 2 * _Point; // Take Profit//--- 2. Отправить торговый приказMqlTradeResult Trade_reslt={0}; // Инициализация структуры результата торгового запросаOrderSend(Trade_reqst,Trade_reslt); // Отправка торгового запроса на сервер//--- выведем в лог ответ сервера //Print(__FUNCTION__," - : - ",Trade_reslt.comment);if(Trade_reslt.retcode==10016) Print("Ответ: ",Trade_reslt.bid,Trade_reslt.ask,Trade_reslt.price);
Il problema ora è che la variabile Bye_opened dovrebbe diventare vera e questo dovrebbe impedire all'EA di fare operazioni inutili fino a quando gli stop non vengono attivati. Ma i cambiamenti della variabile Bye_opened avviene molto tempo e ilconsulente ha il tempo di fare diversi trade.
Solo perché un cambio di variabile richiede molto tempo... come ha fatto a determinarlo? Ok, supponiamo che sia così. Allora la risposta sta nella domanda. Se avete bisogno di un ritardo nell'apertura di una posizione dovete usare Sleep( N ) dove N è calcolato sperimentalmente.
Variante 2. La risposta, di nuovo, è nella domanda. Rendete globale Bye_opened e cambiatelo immediatamente dopo che la posizione è stata aperta con successo, proprio in questo modulo. Azzerare allo stesso modo, come si controlla l'esistenza della posizione.
A quanto pare ha un robot che gira su ogni tick. Tra l'invio dell'ordine al server e la ricezione della risposta dal server, arriveranno diversi altri tick e si aprirà una posizione extra su ogni tick. La mia proposta esclude la situazione di ripetizione delle aperture. Ed è necessario controllare se una posizione è stata aperta o meno.
Questo è quello che voglio dire. Altrimenti, capiranno letteralmente tutto e perderanno un controllo importante.
Buonasera a tutti! Ho deciso di mettere una traccia sui trade aperti nel tester, ho provato a passare attraverso OrderGet....() e mi sono accorto che l'affare è passato dalla categoria degli ordini a una posizione aperta, rispettivamente sono passato attraverso PositionGet....(), ma di nuovo non funziona niente,
La domanda è se devo usare ora HistoryDealGet...() ? O non capisco qualcosa? Quale strada seguire per modificare SL in open trade nel tester? Grazie in anticipo per i commenti.
Per favore indirizzatemi a !!!! come implementare in MQL5 il controllo della presenza (o assenza) di un oggetto grafico, per esempio una linea di tendenza o una linea verticale?
Idealmente, vorrei usare una logica simile a "Se l'ordine non esiste" o "Se l'ordine esiste".
Per favore indirizzatemi a !!!! come implementare in MQL5 il controllo della presenza (o assenza) di un oggetto grafico, per esempio una linea di tendenza o una linea verticale?
Idealmente, vorrei usare una logica simile a "Se l'ordine non esiste" o "Se l'ordine esiste".
Puoi consigliare come implementare correttamente l'algoritmo di acquisto?
Al momento, l'Expert Advisor deve comprare molte volte, finché non riceve l'informazione che ci sono posizioni aperte, e rimane indietro. Come fare in modo che l'Expert Advisor aspetti la risposta della borsa dopo il primo acquisto (quando arrivano le condizioni).
Il problema ora è che la variabile Bye_opened dovrebbe diventare vera e questo dovrebbe impedire all'EA di fare operazioni inutili fino a quando gli stop non vengono attivati. Ma cambiare la variabile Bye_opened richiede molto tempo e l'EA ha il tempo di fare diversi trade.
Cosa manca nel mio codice? Si prega di indicare le carenze.
Il problema ora è che la variabile Bye_opened dovrebbe diventare vera e questo dovrebbe impedire all'EA di fare operazioni inutili fino a quando gli stop non vengono attivati. Ma i cambiamenti della variabile Bye_opened avviene molto tempo e ilconsulente ha il tempo di fare diversi trade.
Solo perché un cambio di variabile richiede molto tempo... come ha fatto a determinarlo? Ok, supponiamo che sia così. Allora la risposta sta nella domanda. Se avete bisogno di un ritardo nell'apertura di una posizione dovete usare Sleep( N ) dove N è calcolato sperimentalmente.
Variante 2. La risposta, di nuovo, è nella domanda. Rendete globale Bye_opened e cambiatelo immediatamente dopo che la posizione è stata aperta con successo, proprio in questo modulo. Azzerare allo stesso modo, come si controlla l'esistenza della posizione.
...
Se si inserisce una linea
dopo il comando: OrderSend(), non ci sarà una riapertura delle posizioni.
Forse è meglio controllare se la posizione si è aperta prima, e poi ...
???
A quanto pare ha un robot che gira su ogni tick. Tra l'invio dell'ordine al server e la ricezione della risposta dal server, arriveranno diversi altri tick e si aprirà una posizione extra su ogni tick. La mia proposta esclude la situazione di ripetizione delle aperture. Ed è necessario controllare se una posizione è stata aperta o meno.
Questo è quello che sto dicendo. Altrimenti capirebbe letteralmente tutto e perderebbe un controllo importante.
Quindi questo è effettivamente il modo di controllare correttamente? Scusa, non riesco a capire bene.
Ecco il codice (tutto situato nel blocco OnTick):
Per evitare di aprire volumi inutili:
Sfortunatamente, questa condizione non funziona quando si apre un trade.