Salve, potreste aiutarmi per favore - ho un problema: il robot entra in una posizione e al prossimo tick modifica il suo stop-loss al minimo precedente e ho bisogno che lo stop-loss sia modificato solo quando la candela si chiude su cui la posizione è stata aperta
void TrailingStop()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true);
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY)
{
double LOW_1 = iLow(NULL,0,1);
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(),0,White);
if(!res) Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
}
if (OrderType()==OP_SELL)
{
double HIGH_1 = iHigh(NULL,0,1);
res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(),0,White);
if(!res) Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
}
}
}
}
return;
}
remjte: Signori! Puoi dirmi il codice che fermerà il test di un EA quando non c'è abbastanza margine per aprire una posizione? Grazie!
Se AccountFreeMarginCheck() è inferiore a un certo valore (ad esempio meno del 50% di AccountFreeMargin) - uscire dalla funzione di trading, il test termina rapidamente perché i cicli vuoti sono quasi scaricabili.
evillive: Se AccountFreeMarginCheck() è inferiore a un certo valore (per esempio, meno del 50% di AccountFreeMargin) - uscire dalla funzione commerciale, il test termina rapidamente, perché i cicli vuoti quasi non si caricano.
Onestamente, ancora molto verde, ha trovato questo pezzo di codice può dirmi come correggere
zhezheria: Lasciatemi scrivere in modo più semplice: come scrivere questa condizione - Non modificare un ordine aperto finché non appare una nuova candela
Lavorare sull'apertura di una nuova barra in un lasso di tempo corrispondente. Un sacco di esempi di codice
Onestamente, ancora molto verde, ha trovato questo pezzo di codice può dirmi come correggere
se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0,0) return (-1); if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2); return (l_lots_4);
Non c'è bisogno di modificarlo, andrà benissimo. A meno che tu non sostituisca le variabili con i tuoi nomi.
Ma se abbiamo bisogno di meno rischio, allora se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - in questo caso, se il 50% o meno di denaro libero rimane dopo che la posizione è aperta con il lotto specificato, allora return (-1)
Puoi darmi un suggerimento, per favore? Ho bisogno di scrivere una parte di codice dove il secondo ordine nella lista sarà selezionato e poi cancellato (in attesa). Restituisce 4051 quando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
remjte: Signori! Puoi dirmi il codice che fermerà il test di un EA quando non c'è abbastanza margine per aprire una posizione? Grazie!
// проверяем доступность свободных средствif(AccountFreeMarginCheck(Symbol(),OP_BUY,OpenLot)<=0 || GetLastError()==134)
{
Print("It is impossible to open the order Buy, not enough money.");
return(0);
}
// проверяем доступность свободных средствif(AccountFreeMarginCheck(Symbol(),OP_SELL,OpenLot)<=0 || GetLastError()==134)
{
Print("It is impossible to open the order Sell, not enough money.");
return(0);
}
Pomid: Puoi darmi un suggerimento, per favore? Ho bisogno di scrivere una parte di codice dove il secondo ordine nella lista sarà selezionato e poi cancellato (in attesa). Restituisce 4051 quando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
Il conteggio degli ordini parte da 0. Prova, OrderSelect(0, SELECT_BY_POS, MODE_TRADES)
Salve, potreste aiutarmi per favore - ho un problema: il robot entra in una posizione e al prossimo tick modifica il suo stop-loss al minimo precedente e ho bisogno che lo stop-loss sia modificato solo quando la candela si chiude su cui la posizione è stata aperta
o come sbarazzarsi di questo errore
Signori! Puoi dirmi il codice che fermerà il test di un EA quando non c'è abbastanza margine per aprire una posizione?
Grazie!
Se AccountFreeMarginCheck() è inferiore a un certo valore (per esempio, meno del 50% di AccountFreeMargin) - uscire dalla funzione commerciale, il test termina rapidamente, perché i cicli vuoti quasi non si caricano.
Onestamente, ancora molto verde, ha trovato questo pezzo di codice può dirmi come correggere
se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0,0) return (-1);
if(GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);
Lasciatemi scrivere in modo più semplice: come scrivere questa condizione - Non modificare un ordine aperto finché non appare una nuova candela
Onestamente, ancora molto verde, ha trovato questo pezzo di codice può dirmi come correggere
se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0,0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);
Non c'è bisogno di modificarlo, andrà benissimo. A meno che tu non sostituisca le variabili con i tuoi nomi.
Ma se abbiamo bisogno di meno rischio, allora se (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - in questo caso, se il 50% o meno di denaro libero rimane dopo che la posizione è aperta con il lotto specificato, allora return (-1)
Signori! Puoi dirmi il codice che fermerà il test di un EA quando non c'è abbastanza margine per aprire una posizione?
Grazie!
Puoi darmi un suggerimento, per favore? Ho bisogno di scrivere una parte di codice dove il secondo ordine nella lista sarà selezionato e poi cancellato (in attesa). Restituisce 4051 quando OrderSelect(1, SELECT_BY_POS, MODE_TRADES)