PDA

Zobacz pełną wersję : Pomoc przy kodowaniu zamówieńliczników dla EA



Oxswl1794
02-09-2009 17:06, 17:06
Pozdrowienia!

Myślę, że podążam za zwykłą historią. Nowość w MQL4, pewne tło kodowania (BASIC i HTML), bla, bla, bla, teraz próbuję swoich sił w pisaniu własnego EA.

To nic specjalnego. Pracuję nad rozwiązaniem EMA EA. Jako, że jest to jedna z moich pierwszych, pomyślałem, że będę to proste. Tak więc EA działa w oparciu o otwarcie baru poniżej 20 EMA, a następnie zamknięcie nad linią. Następny pasek otwiera o 3 pipsy powyżej poprzedniego paska. Ponieważ jest to podstawowy EA, kolejność jest zamykana po uderzeniu w punkt TP lub SL, nie ma innego kodu do zamykania zlecenia.

Oto problem. Pierwsza wersja, którą mam, otwiera zamówienie po każdym teście. Miło, gdy masz opłacalny handel, jest do bani, kiedy tego nie robisz. Dlatego w wersji 2 próbowałem dodać kod z innego EA i odkryłem, że teraz nie otwiera żadnych transakcji.

Oto kod wersji 1 (przepraszam, nie wiem jak umieścić go w schludnym pudełku):

int start ()
{
//----

int cnt, total, ticket;


double emaT = iMA (NULL, 0,20,0, MODE_EMA, PRICE_CLOSE, 0);
podwójne MacdCurrent = iMACD (NULL, 0,12,26,9, PRICE_CLOSE, MODE_MAIN, 0);

total = OrdersTotal ();
jeśli (totallt; 1)


bool buy = false;
bool sell = false;

if ((Ask == High [1] gt; 3 * Point) (Open [1] lt; emaT) (Zamknij [1] gt; emaT) (MacdCurrent gt; 0)) buy = true;
if ((Low [1] == Bid ​​gt; 3 * Point) (emaT gt; Close [1]) (Open [1] gt; emaT) (MacdCurrent lt; 0)) sell = true;


{
jeśli (kup)


ticket = OrderSend (Symbol (), OP_BUY, Partie, Ask, 0, Ask-StopLoss * Point, Ask TakeProfit * Point, Momo Trade, magicnumber, 0, Green);
if (ticketgt; 0)

if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES))


return (0);
}

{
if (sprzedać)


ticket = OrderSend (Symbol (), OP_SELL, Partie, Licytacja, 0, Licytacja StopLoss * Punkt, Bid-TakeProfit * Punkt, Momo Trade, magicnumber, 0, Czerwony);
if (ticketgt; 0)

if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES))

return (0);

}

return (0);
}
//----

Wersja 2 jest taka sama, ale z tym kodem dodanym do licznika:

orders = OrdersTotal ();
dla (cnt = 0; cntlt; OrdersTotal (); cnt )

{
if (OrderSelect (cnt, SELECT_BY_POS))
OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol () == Symbol ())
{
if (OrderType () == OP_BUY)



Ponadto, podczas gdy wszyscy zwracają uwagę, to mój kod jest poprawny przy składaniu zamówienia na podstawie poprzedniego wysokiegoniskiego z kodem (Ask == High [1] gt; 3 * Point)?

Z podziękowaniami!

liverpool89
09-30-2021 08:26, 08:26
Cześć Skeebo Jest oczywisty błąd z załączaniem instrukcji If za pomocą nawiasów {}. na przykład porównaj to z twoim kodem: if (totallt; 1) {bool buy = false; bool sell = false; } mam nadzieję że to pomoże