PDA

Zobacz pełną wersję : Pomoc przy błędzie ”OrderSend 4051”



Moywegt
09-12-2015 13:38, 13:38
Cześć wszystkim. Próbowałem to rozgryźć od jakiegoś czasu, ale nie mogłem tego zrobić. Pomoc w tym będzie miła. Poniższy kod jest tym, co wykonuje moje długie transakcje, ale ciągle otrzymuję błąd OrderSend 4051 nieprawidłową ilość partii dla funkcji OrderSend. Próbowałem na różne sposoby, ale nic nie działa. Używając tego kodu w moim rozmiarze, staram się uzyskać duży rozmiar, który tylko zaryzykuje mój procent na handel, ale używając zmiennej stoploss jako odniesienia. Stoploss zmienia się z handlu na handel, ponieważ jego najniższy poziom niski wynosi 50 sztuk. Jeśli znasz lepszy lub łatwiejszy sposób, który również zostanie doceniony.

Edycja: próbuję w tym celu włączyć zarządzanie ryzykiempieniędzmi do moich transakcji.

Kod zmiennej:
Wstawiono kod extern int Risk_Percent = 3;/Procent mojego konta do ryzyka na handel. double LowestShift = iLowest (Symbol (), PERIOD_H1, MODE_LOW, 50, 1);/Znajdź świecę z najniższą wartością najniższą z 50 świec. double Lowest = iLow (Symbol (), PERIOD_H1, LowestShift);/Znajdź najniższy poziom świecy znaleziony przez grę LowestShift double Kup_Take_Profit = ((najniższa cena) Zapytaj);/Aby dokonać wymiany 1: 1
Kod egzekucyjny:
Wstawiony kod, jeśli (Warunek1 gt; Warunek2) {jeśli (Warunek3 lt; Warunek4) {jeśli (Warunek5 lt; Bid) {if (getOpenOrders () == 0) {double Buy_Lots = NormalizeDouble (((AccountBalance () * (Risk_Percent100))(((najniższa cena ofertowa) * 100000) * (MarketInfo (symbol (), MODE_TICKVALUE))), 2); Buy_Order = OrderSend (Symbol (), OP_BUY, Buy_Lots, Ask, 30, Lowest, Buy_Take_Profit, NULL, 2000,0, clrGreen); }}}}

Deathlok
11-29-2021 03:44, 03:44
pls zrobić wydruk do wielkości zamówienia. Wstawiony kod podwójny Buy_Lots Upewnij się także, że jest to greather, na co pozwala twój broker. Przykład: możesz chcieć wysłać 0,005 części, co nie jest możliwe (limit MT4), lub 0,05, ale twój broker wymaga co najmniej 0,1 części. Używaj również Equity, a nie Salda, może sprawdź też wolny margines

Moywegt
11-29-2021 05:05, 05:05
Dziękuję za odpowiedź. Właśnie to robiłem i wracam z większą ilością informacji. Wydaje się, że część, w której Risk_Percent jest podzielona przez 100, daje mi 0 w druku. Jeśli zmienię ryzyko na 100, to daje mi 1. Nie wydaje mi się, że chcę dać mi dziesiętny. Sprawdzę minimalną ilość, ale myślę, że powyższe jest przyczyną błędu. Wciąż min i max nie są złymi rzeczami do zaprogramowania. Zamienię je na equity. Dlaczego miałbym sprawdzać wolny margines?

lttete1994
11-29-2021 06:26, 06:26
Dziękuję za odpowiedź. Właśnie to robiłem i wracam z większą ilością informacji. Wydaje się, że część, w której Risk_Percent jest podzielona przez 100, daje mi 0 w druku. Jeśli zmienię ryzyko na 100, to daje mi 1. Nie wydaje mi się, że chcę dać mi dziesiętny. Sprawdzę minimalną ilość, ale myślę, że powyższe jest przyczyną błędu. Wciąż min i max nie są złymi rzeczami do zaprogramowania. Zamienię je na equity. Dlaczego miałbym sprawdzać wolny margines?
Ernie11- Risk_Percent należy zdefiniować jako podwójny podwójny Risk_Percent = 0,30;/Procent mojego konta do ryzyka na transakcję.

Moywegt
11-29-2021 07:47, 07:47
Dziękuję za odpowiedź. Zrobiłem to działając, wykonując Risk_Percent * 0,01 zamiast Risk_Percent100. Nie wiem, dlaczego jeden działa, a drugi nie, obaj dają tę samą odpowiedź. Jeśli sprawiłbym, że Risk_Percent byłby podwójny, nie byłbym w stanie zmienić go z pola wprowadzania danych w prawo? Zawsze będzie to stała wartość? Chcę zaimplementować specjalne zatrzymanie trailing, ale mam też z nim trochę trudności. Chcę, aby rozpoczął on stopowanie, gdy dojdzie do X% między OpenOrderPrice a Take_Profit. Czy mógłbyś na to spojrzeć, proszę. Części pogrubione są jedynymi, które zmieniłem z normalnego zatrzymania końcowego. Zmienne: wstawiony kod zewnętrzny int Start_Trailing_Stop_Percent = 70; extern int Trailing_Stop = 100; double LowestShift = iLowest (Symbol (), PERIOD_H1, MODE_LOW, 50, 1); double HighestShift = iHighest (Symbol (), PERIOD_H1, MODE_HIGH, 50, 1); double Lowest = iLow (Symbol (), PERIOD_H1, LowestShift); double Highest = iHigh (Symbol (), PERIOD_H1, HighestShift); double Buy_Take_Profit = ((najniższa cena) Ask); double Sell_Take_Profit = (Bid- (Najwyższy-Zapytaj)); Trailing Stop: Wstawiony kod dla (int i = 0; ilt; OrdersTotal (); i ) {//Wybierz Otwórz transakcje, jeśli (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == false) {}/Wykonaj trailing stop na buy trade if (OrderType () == OP_BUY OrderSymbol () == Symbol ()) {if (Trailing_Stopgt; 0) {# 91; b # 93; if (Bidgt; (((((Start_Trailing_Stop_Percent * 0.01) * (Buy_Take_Profit-OrderOpenPrice ( ))))) OrderOpenPrice ()) {# 91;b # 93; if (OrderStopLoss () lt; Bid-Point * Trailing_Stop) {if (OrderModify (OrderTicket (), OrderOpenPrice (), Bid-Point * Trailing_Stop, OrderTakeProfit (), 0, clrGreen)) {return; } else {}}}}}/Wykonuje trailing stop na Sell trade, jeśli (OrderType () == OP_SELL OrderSymbol () == Symbol ()) {if (Trailing_Stopgt; 0) {# 91; b # 93; if ( Asklt; (OrderOpenPrice () - ((((Start_Trailing_Stop_Percent * 0.01) * (OrderOpenPrice () - Sell_Take_Profit)))))) {# 91;b # 93; if ((OrderStopLoss () gt; (Ask Point * Trailing_Stop)) || (OrderStopLoss () == 0)) {if (OrderModify (OrderTop (), OrderOpenPrice (), Ask punkt * Trailing_Stop, OrderTakeProfit (), 0, clrRed)) {return; } else {}}}}}}

lttete1994
11-29-2021 09:07, 09:07
Dziękuję za odpowiedź. Zrobiłem to działając, wykonując Risk_Percent * 0,01 zamiast Risk_Percent100. Nie wiem, dlaczego jeden działa, a drugi nie, obaj dają tę samą odpowiedź. Jeśli sprawiłbym, że Risk_Percent byłby podwójny, nie byłbym w stanie zmienić go z pola wprowadzania danych w prawo? Zawsze będzie to stała wartość? Chcę zaimplementować specjalne zatrzymanie trailing, ale mam też z nim trochę trudności. Chcę, aby rozpoczął on stopowanie, gdy dojdzie do X% między OpenOrderPrice a Take_Profit. Czy mógłbyś na to spojrzeć, proszę. Części pogrubione ...
Ernie11- Tak, możesz po prostu dodać przed sobą element zewnętrzny. Co do końcowego zatrzymania, nie rozważałbym pracy nad nim bez całego kodu EA.

Moywegt
11-29-2021 10:28, 10:28
1 Załącznik (-i) Dołączę EA. Wszystko to, co wydrukowałem, próbowałem zepsuć. Zauważyłem, że OrderOpenPrice () w Logice Kupna nie jest taka sama jak cena otwarcia podczas weryfikacji historycznej. Dziękuję za poświęcenie czasu na to.
https://www.forex-instant.com/attachments/15276937042088120550.mq4

lttete1994
11-29-2021 11:49, 11:49
1 Załącznik (-i)

Wezmę EA. Wszystko to, co wydrukowałem, próbowałem zepsuć. Zauważyłem, że OrderOpenPrice () w Logice Kupna nie jest taka sama jak cena otwarcia podczas weryfikacji historycznej. Dziękuję za poświęcenie czasu na to. {plik}
Ernie11- Wprowadziłem pewne modyfikacje - wydaje się działać w ST.
https://www.forex-instant.com/attachments/1527693705186796309.mq4

Moywegt
11-29-2021 13:10, 13:10
Cześć cyber1. Dziękuję za pomoc, po prostu uruchomiłem go raz, aby sprawdzić, czy działa i tak działa. Pierwszy raz wdrażam część zarządzania pieniędzmi, więc zobaczę, jak to działa. Ma to pomóc, aby jeden handel nie był większy od drugiego.

Moywegt
11-29-2021 14:31, 14:31
Cześć cyber1. Zauważyłem, że otrzymuję całkiem sporo OrderModify 130s z jego uruchamiania. Wiesz dlaczego? Przenosi także stoploss do% wprowadzonego, ale nie śledzi go stamtąd, postaram się dodać tę część z tym, co napisałeś.

Moywegt
11-29-2021 15:51, 15:51
Cześć cyber1. Nie dostaję już błędów i dostaję go, by śledzić licytacjępytać po osiągnięciu punktu początkowego (BEPoint), jak to określasz. Mam jednak pytanie dotyczące twojego kodu. Część, która wywołuje Trailing_Control, aktywowana jest tylko raz na pasek? Co oznacza, że ​​Stoploss będzie aktualizowany tylko raz na pasku?

lttete1994
11-29-2021 17:12, 17:12
Cześć . Nie dostaję już błędów i dostaję go, by śledzić licytacjępytać po osiągnięciu punktu początkowego (BEPoint), jak to określasz. Mam jednak pytanie dotyczące twojego kodu. Część, która wywołuje Trailing_Control, aktywowana jest tylko raz na pasek? Co oznacza, że ​​Stoploss będzie aktualizowany tylko raz na pasku?
Ernie11- Tak, masz rację. Możesz usunąć ten warunek, jeśli chcesz, ale następnie sprawdzi każdy znak. Masz również rację, że nie ma dodatkowego śledzenia końcowego. Twój post nie był jasny co do tego, co chciałeś zrobić po początkowym zatrzymaniu.

Moywegt
11-29-2021 18:33, 18:33
cyber1. Ok dziękuję. Nigdy nie myślałem o aktualizacji raz na schludny pomysł. Lubię samemu kodować, ale kiedy utknąłem, proszę o pomoc tylko w tej części i kontynuuj. Czy jest coś, co według Ciebie powinienem dodać, by pomóc Ci w zarządzaniu pieniędzmi? Jeszcze raz dziękuję.