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!