Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано


slevg Так что Вы хотите? У Вас был ордер 0,2 + доливка 0,4, потом 0,2 закрылся остался 0,4, что меньше 0,6, потом открылся ещё 0,4. Всё по правилам!


Если бы было так! Остался 0,4 и еще открылся 0,4 и в итоге получилось 0,8!
Для того я и ввел эту переменную, чтобы если в работе останется доливка лотом 0,4, то новый ордер не открывался, потому как 0,8 больше 0,6 (максимального лота в одну сторону). Изменено пользователем slevg
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано


Если бы было так! Остался 0,4 и еще открылся 0,4 и в итоге получилось 0,8!
Для того я и ввел эту переменную, чтобы если в работе останется доливка лотом 0,4, то новый ордер не открывался, потому как 0,8 больше 0,6 (максимального лота в одну сторону).

Сделайте махЛот = 0,3 - и будет Вам счастье!
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Сделал. Задал лот1 = 0,1 и лот2 = 0,2. Вообще не доливает

Я не писал Вам про уменьшение лотов! Оставьте размеры лотов старыми. Нужно уменьшить только махЛот! У меня сейчас клава охрипнет...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Сделал. Задал лот1 = 0,1 и лот2 = 0,2. Вообще не доливает

Я не писал Вам про уменьшение лотов! Оставьте размеры лотов старыми. Нужно уменьшить только махЛот! У меня сейчас клава охрипнет...

Я же писал, что максЛот у меня считает, я не присваивал ему конкретное значение. Присвоить?
Присвоил. И что? Ничего. Не доливает ни при 0,3, ни при 0,7 Изменено пользователем slevg
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Я же писал, что максЛот у меня считает, я не присваивал ему конкретное значение. Присвоить?

То что она у Вас считает Вас-же и не устраивает... Логика работает, а чтоб не открывала 2 ордера по 0,4 лота нужно жёстко задать махЛот = 0,3. Следите за логикой (последний раз):
- бот открывает 1 ордер - 0,2 лота.
- идёт на доливку 0,2 - пробует ещё долиться 0,6 - закрывает 1 ордер остаётся 0,4 лот.
- пытается открыть ещё 0,4 (или 0,2), но оставшийся 0,4 Фух... - больше к этому не возвращаемся, хорошо? По описанной логике сами можете кумекать.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


То что она у Вас считает Вас-же и не устраивает... Логика работает, а чтоб не открывала 2 ордера по 0,4 лота нужно жёстко задать махЛот = 0,3. Следите за логикой (последний раз):
- бот открывает 1 ордер - 0,2 лота.
- идёт на доливку 0,2 - пробует ещё долиться 0,6 - закрывает 1 ордер остаётся 0,4 лот.
- пытается открыть ещё 0,4 (или 0,2), но оставшийся 0,4 Фух... - больше к этому не возвращаемся, хорошо? По описанной логике сами можете кумекать.


Так в том то и дело, что не доливает лотом в 0,4!!!!!!!! Открывает первую сделку лотом 0,2 и на этом ВСЕ! НЕТ лотов в 0,4 ни на покупке, ни на продаже!
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Так в том то и дело, что не доливает лотом в 0,4!!!!!!!! Открывает первую сделку лотом 0,2 и на этом ВСЕ! НЕТ лотов в 0,4 ни на покупке, ни на продаже!

Прикрепи файл mql к письму. я гляну.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Так в том то и дело, что не доливает лотом в 0,4!!!!!!!! Открывает первую сделку лотом 0,2 и на этом ВСЕ! НЕТ лотов в 0,4 ни на покупке, ни на продаже!

Прикрепи файл mql к письму. я гляну.

Пожалуйста

sov.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Далеко Вы уедете с такими текстами (не обижайтесь) - нужно быть внимательнее!

if (OrderType() == OP_BUY)
count++;
sumLot+=OrderLots();
здесь нет фигурных скобок - sumLot считает на всех открытых ордерах
+ т.к. Вы несколько раз вызываете CountSell() и CountBuy() (по 2 раза каждого) и не обнуляете sumLot, то в итоге - каша!

Переделал.

sov.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Далеко Вы уедете с такими текстами (не обижайтесь) - нужно быть внимательнее!

if (OrderType() == OP_BUY)
count++;
sumLot+=OrderLots();
здесь нет фигурных скобок - sumLot считает на всех открытых ордерах
+ т.к. Вы несколько раз вызываете CountSell() и CountBuy() (по 2 раза каждого) и не обнуляете sumLot, то в итоге - каша!

Переделал.


Напишите свою почту и я пришлю вам индикатор, чтобы Вы могли лично протестировать свое творение...В моем варианте хоть как-то да работает...Не обижайтесь

Oll, беру свои слова обратно. Ваша вариант работает лучше. Спасибо за помощь! Просто у вас там были незначительные ошибки из-за которых советник вообще не хотел корректно работать...
Но если включить вторую сделку, то все равно открывает лот в 0,8 вместо максимального в 0,6. Никак не хочет ограничиваться... Изменено пользователем slevg
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Заинтересовался глобальными переменными, но что-то не врублюсь. По описанию заявлено, что она объявляется за пределами всех функций, получается где-то после входной мишуры с названием бота и адресом сайта. Только вот подумал, все экстерны и вводные переменные, вроде как тоже подходят под это описание, так в чём всё-таки суть, где что должно быть?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Хочю спросить у продвинутых пользователей, какой код нужен для открытия позиций при достижений круглого уровня сам пробовал и приходилась в каждый "OrderSend" вставлять конкретную цену , может есть какая нибудь функция ?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

как на пересечении скользящих закрыть ордер?
т.е. есть открытый ордер на пересечении скользящих и по условию только один рыночный ордер может быть открытым и нужно чтоб ранее открытый рыночный ордер закрыть и открыть новый ордер на пересечении скользящих
int start()
{
if (CountTrades() {
double ima1 = iMA(Symbol(), 0, period1, ma_shift1, MODE_SMA, PRICE_CLOSE, 0);
double ima2 = iMA(Symbol(), 0, period2, ma_shift2, MODE_SMA, PRICE_CLOSE, 0);

if (ima2 > ima1)
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, NULL, Magic, 0, CLR_NONE);
}
else if (ima2 {
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, NULL, Magic, 0, CLR_NONE);
}
}
return(0);
}
//+------------------------------------------------------------------+
int CountTrades()
{
int count = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
count++;
}
}

return(count);
}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Спойлер


Хочю спросить у продвинутых пользователей, какой код нужен для открытия позиций при достижений круглого уровня сам пробовал и приходилась в каждый "OrderSend" вставлять конкретную цену , может есть какая нибудь функция ?



Может попробовать реализовать через индикатор круглых уровней, где-то на форуме есть?

Можно наверное реализовать через вычисление, сначала получаем текущую цену, потом через NormalizeDouble(Bid, 2) присваиваем значение какой либо переменной, вместо Digits ставим число, сколько нужно соответственно нулей круглого уровня. Потом из полученной переменной вычитаем текущую цену и если получается 0, то это наш уровень.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

А подскажите, если мы хотим вычислить размер предыдущего бара и сравнить его со значением внешних настроек, то нужно ли нормализовать такое значение?

Например:

Если размер бара входит в заданный интервал, то выставляем отложенный ордер на продажу с отступом от лоу и стопом выше хая
(P.S. Функции проверки на ошибки работают)

Спойлер


//+------------------------------------------------------------------+
//| ttt.mq4 |
//| Copyright 2014, . |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, "
#property link ""
#property version "1.00"
#property strict

//Parameters of expert
extern int TakeProfit = 20;
extern int StopLoss = 5;
extern double Lot = 0.1;
extern int Slippage = 5;
extern int Magic = 123;



extern string indi = "Parameters of bar";

extern int indent_open = 5;

extern int bar_size_min = 15;
extern int bar_size_max = 50;

double SL, TP,open_sell,open_buy, bssmx, bssmn, to, ts;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
indent_open *= 10;
bar_size_max *= 10;
bar_size_min *= 10;

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{

bssmx = NormalizeDouble(bar_size_max*Point, Digits); //Нормализуем значение максимального размера бара
bssmn = NormalizeDouble(bar_size_min*Point, Digits); //Нормализуем значение минимального размера бара

double bar_size_sell = Open[1]-Close[1]; //Вычисляем размер бара на продажу


if(Close[1] bssmn && bar_size_sell {
SL = NormalizeDouble(High[1] + StopLoss*Point, Digits);
TP = NormalizeDouble(open_sell - TakeProfit*Point, Digits);
open_sell = NormalizeDouble(Low[1] -indent_open*Point, Digits);

ticket = OrderSendX(Symbol(),OP_SELLSTOP, Lot, open_sell, Slippage, 0, 0, "", Magic, 0, Red);

if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModifyX(ticket, OrderOpenPrice(), SL, TP, 0);
}
}


}

//+------------------------------------------------------------------+

int OrderSendX( string symbol, int cmd, double volume, double price, int slippage, double stoploss,
double takeprofit, string comment, int magic = 0, datetime expiration = 0, color arrow_color=CLR_NONE)

{
int err = GetLastError();
err = 0;
bool exit_loop = false;
int loc_ticket = -1;
int retry = 10;
int cnt = 0;

if(cmd == OP_BUY || cmd == OP_SELL)

{
while(!exit_loop)
{
loc_ticket = OrderSend(symbol, cmd, volume, price, slippage,stoploss, takeprofit, comment, magic, expiration, arrow_color );
err = GetLastError();

switch(err)
{

case ERR_NO_ERROR:
exit_loop = true;
break;

case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;
case ERR_INVALID_PRICE:
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES:
case ERR_REQUOTE:
RefreshRates();
continue;
default:
exit_loop = true;
break;


}

if(cnt>retry)

exit_loop = true;
if (!exit_loop)
{
Sleep(1000);
RefreshRates();
}

else
{
if( err != ERR_NO_ERROR)
{
Print("Ошибка :" + err);
}
}
if(err == ERR_NO_ERROR)

{
if ( OrderSelect (loc_ticket, SELECT_BY_TICKET, MODE_TRADES))
{
Print ("Ордер успешно выбран");

}
else Print("Одер не выбран");
return(loc_ticket);

}
Print ("Ошибка открытия ордера после" + cnt + "попыток.");

}

}
return(0);
}

//+------------------------------------------------------------------+

bool OrderModifyX(int loc_ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
{

if(OrderSelect(loc_ticket, SELECT_BY_TICKET,MODE_TRADES))
{
price = NormalizeDouble(price, Digits);
stoploss = NormalizeDouble(stoploss, Digits);
takeprofit = NormalizeDouble(takeprofit, Digits);
CheckValidStop (Symbol(), price, stoploss);

int err = GetLastError();
err = 0;
bool exit_loop = false;
bool result;

int retry = 10;
int cnt = 0;

while(!exit_loop)
{
result = OrderModify(loc_ticket, price, stoploss, takeprofit, expiration, arrow_color);
err = GetLastError();

if (result == true)
{
Print("Ордер#" + loc_ticket + " успешно модифицирован.");
return(true);
}
else if (result != true)
{
switch(err)
{

case ERR_NO_ERROR:
exit_loop = true;
break;

case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;
case ERR_INVALID_PRICE:
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES:
case ERR_REQUOTE:
RefreshRates();
continue;
default:
exit_loop = true;
break;



}

}

}

if(err != ERR_NO_ERROR)
{
Print ("Ошибка модификации ордера #" + loc_ticket);
Print ("Код ошибки: " + err);
}


}


else
{
Print("Не удалось выбрать ордерб ticket = " + loc_ticket);
return(false);
}

return(true);

}
//+------------------------------------------------------------------+

void CheckValidStop (string symbol, double price, double& sl)
{
if(sl == 0)
return;

double servers_min_stop = MarketInfo(symbol, MODE_STOPLEVEL) * MarketInfo (symbol, MODE_POINT);

if(MathAbs (price - sl) {
if(price > sl)
sl = price - servers_min_stop;
else sl = sl + servers_min_stop;


}

sl = NormalizeDouble(sl, MarketInfo (symbol, MODE_DIGITS));

}



Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
oleguitar, ну да получается, при вычислении размера бара берутся ценовые уровни, соответственно имеют знаки после запятой, в итоге чтобы сравнить со значением в пунктах, его нужно привести в тот же вид, т.е. нормализовать. Например при проходе бара на 4-х знаке 20 пунктов, получим значение 0,0020, а в настройке скажем имеем просто 20, нормализуем (20 * 0,0001, и Digits т.е. обрезаем до четвёртого знака после запятой). Вообще, это очень важно, точно знать, какой вид в цифрах имеют операторы и переменные, тогда всё будет понятно.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Доброго времени суток.
Написал первый советник на 2 машках для пробы, при
компиляции ошибок нет, на тестере не работает.
Посмотрите кто-нибудь пожалуйста , в чем может быть проблема.

P.S. Отдельное спасибо Сергею (xbms) , за видео уроки.
У человека прям талант.

Код прилагаю :

extern double Lots = 0.1;
extern int StopLoss = 40;
extern int Magic = 777;
extern int Slippage = 5;
extern int TrailingStop = 40;
extern int TrailingStep = 5;
//+------------------------------------------------------------------+
extern int Period_1 = 13;
extern int Mode_1 = MODE_SMA;
extern int SHift_1 = 0;
extern int Price_1 = PRICE_CLOSE;
extern int Period_2 = 8;
extern int Mode_2 = MODE_SMA;
extern int SHift_2 = 0;
extern int Price_2 = PRICE_CLOSE;
//+------------------------------------------------------------------+
int ticket;
double SL;
//+------------------------------------------------------------------+

class MASignal
{
protected:
int xPeriod_1;
int xMode_1;
int xSHift_1;
int xPrice_1;
int xPeriod_2;
int xMode_2;
int xSHift_2;
int xPrice_2;

private:
double h1,
l1;
public:

MASignal(void);
~MASignal(void);

void init();
int SignalOpen();
int SignalClose();
};
//+------------------------------------------------------------------+
MASignal *MAS;
//+------------------------------------------------------------------+
MASignal::MASignal()
{
xPeriod_1 = Period_1;
xMode_1 = Mode_1;
xSHift_1 = SHift_1;
xPrice_1 = Price_1;
xPeriod_2 = Period_2;
xMode_2 = Mode_2;
xSHift_2 = SHift_2;
xPrice_2 = Price_2;
}
//+------------------------------------------------------------------+
MASignal::~MASignal()
{

}
//+------------------------------------------------------------------+
void MASignal::init()
{
double h1 = iMA(Symbol(), 0, xPeriod_1, xSHift_1, xMode_1, xPrice_1, 1);
double l1 = iMA(Symbol(), 0, xPeriod_2, xSHift_2, xMode_2, xPrice_2, 1);
}
//+------------------------------------------------------------------+
int MASignal::SignalOpen() //Сигнал открытия
{
init();

if(h1 > l1) return(OP_BUY);
if(h1
return(-1);
}
//+------------------------------------------------------------------+
int MASignal::SignalClose() //Сигнал закрытия
{
init();

if(h1 > l1) return(OP_SELL);
if(h1
return(-1);
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3 || Digits == 5) //Проверка знака 4 или 5
{
TrailingStop *= 10;
StopLoss *= 10;
Slippage *= 10;
TrailingStep *= 10;
}

MAS = new MASignal;

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
delete MAS;
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Trailing();
//Покупка
if(CountBuy() == 0 && MAS.SignalOpen() == OP_BUY)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if(ticket > 0)
{
SL = NormalizeDouble(Ask - StopLoss*Point,Digits);
OrderModify(ticket, OrderOpenPrice(), SL, 0, 0);
}
} //Продажа
if(CountSell() == 0 && MAS.SignalOpen() == OP_SELL)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if(ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point,Digits);
OrderModify(ticket, OrderOpenPrice(), SL, 0, 0);
}
}
if(CountBuy() > 0 && MAS.SignalClose() == OP_BUY) //Закрытие покупки
CloseOrders(OP_BUY);
if(CountSell() > 0 && MAS.SignalClose() == OP_SELL) //Закрытие продажи
CloseOrders(OP_SELL);
}
//--------------------------------------------------------------------
void Trailing() // Трейлинг
{
for(int i=0; i {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop * Point)
{
if(OrderStopLoss() {
StopLoss = NormalizeDouble(Bid - TrailingStop * Point,Digits);
if(OrderStopLoss() != StopLoss)
OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss, 0, 0);
}
}
}
if(OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStep * Point)
{
if(OrderStopLoss() > (TrailingStop + TrailingStep) * Point)
{
StopLoss = NormalizeDouble(Ask + TrailingStop * Point,Digits);
if(OrderStopLoss() != StopLoss)
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss, 0, 0);
}
}
}
}
}
}
}
//--------------------------------------------------------------------
void CloseOrders (int otype) //Закрытие ордеров
{
for(int i = 0; i if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == Magic &&
OrderSymbol() == Symbol() &&
OrderType() == otype)
{
if(OrderType() == OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage);
if(OrderType() == OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,Slippage);
}
}
}
//+------------------------------------------------------------------+
int CountBuy() // Проверка количества ордеров
{
int count = 0;
for (int i = OrdersTotal() -1; i >= 0; i -- )
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic &&
OrderType() == OP_BUY)
count ++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for (int i = OrdersTotal() -1; i >= 0; i -- )
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic &&
OrderType() == OP_SELL)
count ++;
}
}
return(count);
}
//--------------------------------------------------------------------+

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

всем привет.хороший робот,но есть такая хрень:если в общих настройках включить "только лонг", то все хорошо работает,но если включить "только шорт" то открывать не хочет,а когда включено и лонг и шорт то все нормально открывает и вверх и вниз.если кто-то может-исправьте пожалуйста.спасибо.

FractalGrid_Expert.ex4
FractalGrid_Expert.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

У меня открывает и лонг и шорт (отдельно и вместе) правда шортит значительно (в разы) реже чем в лонг. Косяк какой-то есть, но ведь льёт... смысл совой заниматься?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

При подсчёте ордеров сделай:
cntBuy = 0; cntSell = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
count++;
if (OrderType() == OP_BUY) cntBuy++;
if (OrderType() == OP_SELL) cntSell++;
}...

При выставлении ордеров сделай:
... OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, NULL, Magic, 0, CLR_NONE);
if (cntBuy > 0) OrderClose(...);
...
Для селл аналогично... cntBuy и cntSell объяви на глобальном уровне.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

хм...

а почему вот такая функция CountSell игнорирует селл-стопы?

int CountSell()
{
int count = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)
{
bool select1 = OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL && OrderType() == OP_SELLSTOP)
count++;
}
}
return(count);
}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


У меня открывает и лонг и шорт (отдельно и вместе) правда шортит значительно (в разы) реже чем в лонг. Косяк какой-то есть, но ведь льёт... смысл совой заниматься?

я его ставлю в одну сторону-по тренду,на откатах сова выставляет отложки а потом когда они срабатывают-усредняет их

Добавлено: 05-09-2014 05:47:54


правда шортит значительно (в разы) реже чем в лонг.


это может в тестере, а на демо не шортит вообще. вот на канадце он работает сам ,а на новозеландце я поставил и лонг и шорт, потом лонг удалил и переключил"только шорт"так он один раз в селл отработал и все. ~x(

USDCADM30.png
NZDUSDH1.png

Изменено пользователем beketv1
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...