Програмування mql4, пишемо радник

А ось і мій (модифікований Ваш) код

#define ORDERBUY 1
#define ORDERSELL 2
#define ORDERBUYSTOP 4
#define ORDERSELLSTOP 8
#define ORDERBUYLIMIT 16
#define ORDERSELLLIMIT 32

int OrderCount (int type, int magic = 0, string symbol = «current»)
int i, count = 0;
if (symbol == «current»)
symbol = Symbol ();
>
for (i = OrdersTotal () - 1; i> = 0; i-)
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol () == symbol OrderMagicNumber () == magic)
if (type ORDERBUY OrderType () == OP_BUY)
count ++;
>
if (type ORDERSELL OrderType () == OP_SELL)
count ++;
>
if (type ORDERBUYSTOP OrderType () == OP_BUYSTOP)
count ++;
>
if (type ORDERSELLSTOP OrderType () == OP_SELLSTOP)
count ++;
>
if (type ORDERBUYLIMIT OrderType () == OP_BUYLIMIT)
count ++;
>
if (type ORDERSELLLIMIT OrderType () == OP_SELLLIMIT)
count ++;
>
>
>
return (count);
>

А власне виклик може вйглядеть як

int OpenedPositionsCount = OrderCount (ORDERBUY | ORDERSELL, magic, Symbol ());

int PendingLongPositionsCount = OrderCount (ORDERBUYSTOP | ORDERBYULIMIT, magic, Symbol ());

Переписав, змінив ордера, працює на парах і на золоті, АЛЕ в тестері на золоті видає -GOLD, H1: OrderSend error 130 - Хотілося б дізнатися чому, і як протестувати на золоті. Дякуємо!

Дуже сподобалися уроки від Сергія aka xbms невимушеними поясненнями. Прошу вибачення, якщо щось не так скажу ...

В даному уроці # 2, на моя погляд такий код був доречніше на предмет перевірки з використанням оператора if так:

if (HourStart == TimeHour (TimeCurrent ()))
if (CountBuyLimit () == 0)
SL = NormalizeDouble (minprice - StopLoss * Point, Digits);
TP = NormalizeDouble (minprice + TakeProfit * Point, Digits);
OrderSend (Symbol (), OP_BUYLIMIT, Lots, minprice, Slippage, SL, TP, comment, Magic, 0, Blue);
>
if (CountSellLimit () == 0)
SL = NormalizeDouble (maxprice + StopLoss * Point, Digits);
TP = NormalizeDouble (maxprice - TakeProfit * Point, Digits);
OrderSend (Symbol (), OP_SELLLIMIT, Lots, maxprice, Slippage, SL, TP, comment, Magic, 0, Red);
>
>

if (HourStart == TimeHour (TimeCurrent ()) CountBuyLimit () == 0 CountSellLimit () == 0)

Тому що після тимчасової перевірки І ОДНОЧАСНОЇ перевірки на отложеннікі може відбутися наступне ... радник відкладе один ордер, наприклад, на покупку, а отложеннік на продаж НЕ відкладеться через близької поточної ціни з мінімальним значенням і тоді умови будуть такими, що CountBuyLimit () == 1 і ця умова НЕ дасть виставити отложеннік на продаж ... Може я не правий? Вибачте!

« 'End_of_program' - unbalanced left parenthesis C: Program FilesInstaTraderexpertsTest1.mq4 (181, 1)»

Як її вирішити?
Оце частка коду, в якому видає помилку. Начебто все правильно написав ...:

for (int trade = OrdersTotal () - 1; trade> = 0; trade-)

OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol () == Symbol () OrderMagicNumber () == Magic)

if (OrderType () == OP_SELLLIMIT)

Ось вирішив вивчати теж Mql. Життя змусило. Безкоштовно ніхто не напише, та ще й граль вкраде. Тільки біда - вже в терміналах Mql5. Там трохи по іншому. З цього паралейно і цей курс намагаюся подужати і на сайті Mql. Застряг на Handles. Ось і питання відразу - а як скористатися індикаторами. яких немає в довіднику по Mql. Як дізнатися які параметри потрібні?

Оновили урок під нові білди

досить давно читаю статті на Вашому сайті ... і склалася якась стратегія, що потребує проводити більше часу біля комп'ютера ... але специфіка моєї основної роботи не дозволяє постійно знаходиться біля монітора ... кілька разів намагався почати вивчення MQL. але то велика завантаженість на роботі, а потім і народження маленької донечки змушувало все це відкладати в "довгу шухляду» .Наверное. якби не оновлені уроки. я так би і відкладав ... тепер все набагато зрозуміліше і ясніше. Хочу сказати величезне спасибі і з нетерпінням чекаю виходу наступних оновлених уроков.С повагою. Жук