W środowisku ea na żywo w zeszłym tygodniu przegapiłem kilka wpisów w zaprogramowanym czasie z powodu nieprawidłowej ceny (błąd 129), która pochodziła głównie z rynku, który odszedł od mojej ceny wejścia poza zestaw poślizgu.
ea jest zaprogramowany do handlu tylko pod warunkiem i tylko w ramach przydzielonego słupka/minutę, więc nie wysłał ponownie zlecenia, aby uzyskać wypełnienie po błędzie 129.
Jak mogę tego uniknąć, nie uzyskując przypadkowo większej liczby wypełnień niż zamierzono?
e jest zaprogramowany do jednoczesnego wysyłania zarówno kupna, jak i sprzedaży. Kilka razy wypełniono tylko jedną stronę. Potrzebuję go, aby wypełniał obie strony CAŁY CZAS, gdy generowany jest sygnał.
Oto podstawowa procedura zakupu i zmiany, które wprowadziłem w celu ponownego wysłania zamówienia po błędzie 129. (Logika strony sprzedaży jest taka sama).
Myślę, że to zadziała… JEDNAK obawiam się, że przy tym kodzie istnieje możliwość, że wypełni się 2 zakupami lub 2 sprzedażami zamiast 1 każdego.
Rozumiem, że mogę zapętlić i wyszukać (OrderType() == OP_BUY), kiedy próbowałem tego, oryginalne zamówienie nie zostało wysłane ani wypełnione.
Jak mogę sprawić, by to działało zgodnie z przeznaczeniem i zawsze wypełniało się 1 kupnem i 1 sprzedażą po błędzie 129, i nie przypadkowo wypełniało się 2 zakupami lub 2 sprzedażami?
Kod poniżej:
**************************
anuluj fKup1()
{//RefreshRates();
while(IsTradeContextBusy()) Sleep(100);
Odśwież stawki();
int wynik = OrderSend(Trade,OP_BUY,Lots,Ask,MaxSlippage,0,0,Op en LONG 1B,Magic1B,0,Blue);
int check = GetLastError();
if(check != 0) { Print(Błąd wysyłania zamówienia!!! Kod błędu: , check, , ErrorDescription(check)); if (((check == 129) || (check == 138) || (check == 4) || (check == 137)) (OrdersTotal() lt; 2)) fBuy1();}
Print(NormalizeDouble(AccountMargin(),2), MR,/, NormalizeDouble(AccountFreeMargin(),2), FM Dostępne,/Około AE: , NormalizeDouble(AccountEquity(),2),/M %: , NormalizeDouble (AccountInfoDouble(ACCOUNT_MARGIN_LEVEL),2), % );
}