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

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


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

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

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

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

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

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

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

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

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

Перейти

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

Перейти

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

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

http://book.mql4.com/ru/appendix/errors
Реквоты - новая цена, существенно отличающаяся от той, с которой пытаетесь работать.
Или в боте по своей вине неверно указываете цену, по которой пытаетесь отработать.

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

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



Привет всем, господа подскажите как написать вот эту функцию что бы она не выдавала предупреждение от том что не явное преобразование строки в число. то есть
implicit conversion from 'string' to 'number'


Я не понял: зачем Вы хотите присвоить числовой переменной строковое название символа?
Чтоб не ругалась вместо "int instrument;" пишите "string instrument;" (для 600 - возможны варианты)
Вы здесь не раз задавали вопросы и получали ответы - обратной реакции нет - поняли/нет...


Да спасибо,я сам разобрался.По поводу вашего высказывания,критика конечно хорошо.но бывает так что ответа ждешь очень долго и забываешь сам что хотел,либо не получаешь совсем. Извините что не так !
Ссылка на сообщение
Поделиться на другие сайты

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

Решился тут на вот какую авантюру
И в связи с этим вопрос.
Мне нужно из эксперта создать несколько подокон окна графика (подвалов проще говоря).
Я так понимаю из эксперта создавать подокно нельзя? Кто подскажет?
Если так, то очень неудобно конечно. Какое может быть решение?
Создавать отдельный индикатор, который бы создал пустое окно? Не самое лучшее решение...

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

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

Здравствуйте! Решил освоить азы по написанию сов. на внешних индикаторах. Посмотрел третий урок. Всё повторил как там. Скомпилировал-0 ошибок. Проверяю в тесторе-пишет: 2014.06.16 15:47:09.555 2014.03.11 01:34 Cannot open file 'C:\Program Files\MetaTrader 4 - RoboForex\MQL4\indicators\TheSecretTR~.ex4' [2] !!!!! Как быть?
Недавно переустановил MT4(версия 4 билд 646), а в нём MetaEditor почему-то 5 версии билд 934. Так должно быть?
Подскажите пожалуйсто что делать.

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

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


Мне нужно из эксперта создать несколько подокон окна графика (подвалов проще говоря).
Я так понимаю из эксперта создавать подокно нельзя? Кто подскажет?
Если так, то очень неудобно конечно. Какое может быть решение?
Создавать отдельный индикатор, который бы создал пустое окно? Не самое лучшее решение...

А может индюку доверить считать стату по закрытым сделкам? - и передавать в эксперт через буферы (например среднюю эквити счёта), а заодно индюк откроет подокно и нарисует?

Добавлено: 16-06-2014 11:46:37


Cannot open file 'C:\Program Files\MetaTrader 4 - RoboForex\MQL4\indicators\TheSecretTR~.ex4' [2] !!!!! Как быть?

В МТ4 600+ билде индюки хранятся в другой папке по другому адресу. В блоге есть статья об этом.
Проще говоря по указанному пути нет этого индюка (при обновлении МТ изменил папки и его надо самому копировать) Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте Oll ! Спасибо Вам за ответ. Только я не понял куда надо поместить индикатор. В МТ4 через каталог данных скопировал. индикатор появляется в терминале, всё работает. Где найти другую папку? Подскажите пожалуйста!

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

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

Значит название индикатора неправильно написал. Посмотри, как называется индюк в его коде. IndicatorShortName функцию в индюке найди. Это и есть название. Оно должно быть таким же, как название самого файла индикатора.

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

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


индикатор появляется в терминале, всё работает. Где найти другую папку?

Если в терминале видите, то индюк установлен правильно и советник обязан его видеть тоже.
У Вас есть код индикатора? - если да, то посмотрите ответ выше от Silentspec.
Если кода нет - то выкладывайте здесь Ваш код вызова индюка.
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо Вам за помощь! Но я не понял где найти Имя? Дело в том,что я только начал со всем этим разбираться. Накачал с интернета индюков,с этого сайта тоже много ТС. Вот взял инд. ,но он был ехе4. Нашел какую-то прогамулину,через неё получил MQL4. Может что не правильно получилось. Не легко осознавать себя тупым. Даже сейчас не знаю,как сюда фаил копировать. Посмотрите пожалуйста.

индикатор называется TheSecretTR~

#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_maximum 0.2
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Crimson

string gs_unused_76 = "TheSecretTR";
extern int ADX_period = 20;
extern int MOM_period = 20;
extern int MACD_fast_ema = 5;
extern int MACD_slow_ema = 15;
extern int MACD_signal_period = 9;
extern int MaxBarsOnGraph = 500;
double g_ibuf_108[];
double g_ibuf_112[];
double gda_116[];
double gda_120[];
double gda_124[];
double gda_128[];
double gda_132[];
double gda_136[];
double g_iadx_140;
double g_iadx_148;
double g_iadx_156;
double g_imomentum_164;
double g_imacd_172;
int g_bars_180;
int gi_184;
int gi_188;
int gi_196;
int gi_200;
int gi_204;
int gi_208;
int g_datetime_228;
int g_datetime_232;
int g_datetime_236;
int gi_unused_240;
int gi_244 = 0;
int gi_248;
int gi_256;
int gi_unused_260 = -1;
string gs_dummy_264;
string gs_272 = "TheSecret Trend Reversal";
string gs_dummy_280;

int init() {
IndicatorShortName(gs_272);
SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 0);
SetIndexArrow(0, 108);
SetIndexBuffer(0, g_ibuf_108);
SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 0);
SetIndexArrow(1, 108);
SetIndexBuffer(1, g_ibuf_112);
SetIndexEmptyValue(0, 0);
SetIndexEmptyValue(1, 0);
g_datetime_228 = 0;
g_datetime_232 = 0;
g_datetime_236 = 0;
gi_unused_240 = 0;
return (0);
}

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

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

Я ж сказал, ищи функцию IndicatorShortName.
Она у тебя тут: IndicatorShortName(gs_272);
Ей передается значение gs_272. Это есть имя. Ищем, чему равна эта переменная: string gs_272 = "TheSecret Trend Reversal";
Значит имя этому индикатору "TheSecret Trend Reversal", а называться он должен у нас (переименуй его) TheSecret Trend Reversal.mq4.
Тогда из советника надо будет его вызвать так:
iCustom(Symbol(),Period(),"TheSecret Trend Reversal",ADX_period,MOM_period,MACD_fast_ema,MACD_slow_ema,MACD_signal_period,MaxBarsOnGraph,0,0);
Ну, последние два числа поставил нули (номер буфера и бара) ты уж сам придумай.

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

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

Спасибо ещё раз огромное! Вот есть же добрые люди!!!!!! Буду пробовать.


Я ж сказал, ищи функцию IndicatorShortName.
Она у тебя тут: IndicatorShortName(gs_272);
Ей передается значение gs_272. Это есть имя. Ищем, чему равна эта переменная: string gs_272 = "TheSecret Trend Reversal";
Значит имя этому индикатору "TheSecret Trend Reversal", а называться он должен у нас (переименуй его) TheSecret Trend Reversal.mq4.
Тогда из советника надо будет его вызвать так:
iCustom(Symbol(),Period(),"TheSecret Trend Reversal",ADX_period,MOM_period,MACD_fast_ema,MACD_slow_ema,MACD_signal_period,MaxBarsOnGraph,0,0);
Ну, последние два числа поставил нули (номер буфера и бара) ты уж сам придумай.

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

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

помогите кто чем может: не модифицирует ордер, в журнале пишет ошибку 130, и как так сделать чтоб на каждой свече открывался ордер, а не после sl или tp!!!!!!!

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

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


помогите кто чем может: не модифицирует ордер, в журнале пишет ошибку 130, и как так сделать чтоб на каждой свече открывался ордер, а не после sl или tp!!!!!!!

Без паники.
- Вы знаете какой СтопЛевел у вашего брокера на торгуемой паре?
- Вы знаете как нормализовать цену при передаче в функцию?
Если нет - то узнайте, если да - то код в студию.
Ссылка на сообщение
Поделиться на другие сайты

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

стоп левел у брокера 3 пункта, вот код:
void OnTick()
{

if (CountTrades() == 0)
{
double ima = iMA(Symbol(), PERIOD_H1, 20, 5, MODE_EMA, PRICE_CLOSE, 1);

if (Ask > ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
{
sl = NormalizeDouble(Ask-StopLoss*Point,Digits);
tp = NormalizeDouble(Ask+TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};
}
}
else if (Bid {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
sl = NormalizeDouble(Bid + StopLoss*Point,Digits);
tp = NormalizeDouble(Bid - TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};
}
}
}
else
{
int order_type = FindLastType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if (Ask {
LastLot = FindLastLots(OP_BUY);
oldlots = NormalizeDouble(oldlots*Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, LastLot, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
sl = NormalizeDouble(Ask-StopLoss*Point,Digits);
tp = NormalizeDouble(Ask+TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};

}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if (Bid {
LastLot = FindLastLots(OP_SELL);
oldlots = NormalizeDouble(oldlots*Multiplier, 2);
ticket = OrderSend(Symbol(), OP_SELL, LastLot, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
sl = NormalizeDouble(Bid + StopLoss*Point,Digits);
tp = NormalizeDouble(Bid - TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};

}
}
}


}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{

int oldticket;

ticket = 0;
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() &&
OrderMagicNumber() == Magic &&
OrderType() == otype)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}

}
}
}
return(oldlots);


}
//+------------------------------------------------------------------+
double FindLastPrice(int otype)
{

int oldticket;

ticket = 0;

for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() &&
OrderMagicNumber() == Magic &&
OrderType() == otype)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}

}
}
}
return(oldopenprice);
}
//+------------------------------------------------------------------+
int FindLastType()
{
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() &&
OrderMagicNumber() == Magic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
голову себе сломал уже, что тут не так?

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

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


голову себе сломал уже, что тут не так?

Если коротко - всё немного не так...
Подробнее:
- Выкладывать желательно весь код, а то промучился с ним, что-б запустить.
- У Вас нет плана. Напишите укрупнённо алгоритм программы - ошибок меньше будет.
- В функциях FindLastType, FindLastPrice, FindLastLots - запутались. Зачем такие навороты? - нашли последний ордер и сразу сохраните все его атрибуты (тип, прайс и лот)
- Зачем сохраняете тикет последнего ордера если им не пользуетесь?
- Зачем Вам мартин если не пользуетесь?
- Вы открыли ордер Селл, на следующем тике проверка:
if (Bid прайс+СЛ, но и этот вариант работать не будет - т.к. проверка открытого ордера идет на каждом тике и когда СЛ сработает у Вас не будет открытого ордера и этот блок программы работать не будет.
- ограничений на мах.количество открытых ордеров нет.
- условий на закрытие нет (или у Вас по СЛ/ТР?)

В опчем... разбирайтесь - не опускайте руки и всё получится.
Переписать Вашего бота не смогу - не представляю чего хотите от него добиться.
На текущий момент бот работает так, как Вы ему предписали - открывает ордера в одну сторону без остановки пока есть свободные средства... (т.е. открывает и модифицирует ордера без ошибок)

ppp.mq4

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

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

Я только учусь писать, спасибо за подсказки, буду дальше разбираться. Цель у меня такая: по цене открытия часовой свечи будет открываться ордер в зависимости от МА, ниже по селл выше по бай, он закрывается по тп или сл, дальше ордер открывается по цене открытия следующей свечи. Если ордер сработал по сл, то следующий ордер открывается по удвоенному лоту по цене открытия следующей свечи, и так по кругу!!!
посмотрите весь исправленный код:

extern double Lots = 0.1;
extern int Slippage = 5;
extern double StopLoss = 10;
extern double TakeProfit = 10;
extern double Multiplier = 2;
extern int Magic = 12345;


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

int ticket;
double price, sl, tp, LastLot, oldlots, oldopenprice;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if ( Digits == 3 || Digits == 5 )
{
Slippage *=10;
StopLoss *=10;
TakeProfit *=10;
}

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


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

if (CountTrades() == 0)
{
double ima = iMA(Symbol(), PERIOD_H1, 20, 5, MODE_EMA, PRICE_CLOSE, 1);

if (Ask > ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
{
sl = NormalizeDouble(Ask-StopLoss*Point,Digits);
tp = NormalizeDouble(Ask+TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};
}
}
else if (Bid {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
sl = NormalizeDouble(Bid + StopLoss*Point,Digits);
tp = NormalizeDouble(Bid - TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};
}
}
}
else
{
int order_type = FindLastType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if (Ask {
LastLot = FindLastLots(OP_BUY);
oldlots = NormalizeDouble(oldlots*Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, LastLot, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
sl = NormalizeDouble(Ask-StopLoss*Point,Digits);
tp = NormalizeDouble(Ask+TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};

}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if (Bid >= price + StopLoss*Point)
{
LastLot = FindLastLots(OP_SELL);
oldlots = NormalizeDouble(oldlots*Multiplier, 2);
ticket = OrderSend(Symbol(), OP_SELL, LastLot, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
sl = NormalizeDouble(Bid + StopLoss*Point,Digits);
tp = NormalizeDouble(Bid - TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};

}
}
}


}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{

for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() &&
OrderMagicNumber() == Magic &&
OrderType() == otype)

oldlots = OrderLots();

}
}
return(oldlots);


}
//+------------------------------------------------------------------+
double FindLastPrice(int otype)
{


for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() &&
OrderMagicNumber() == Magic &&
OrderType() == otype)
oldopenprice = OrderOpenPrice();

}
}
return(oldopenprice);
}
//+------------------------------------------------------------------+
int FindLastType()
{
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() &&
OrderMagicNumber() == Magic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
только не могу разобраться чтоб ордер окрывался по цене открытия свечи
большое спасибо за ранее!!!!!!!!!!!!

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

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


Цель у меня такая: по цене открытия часовой свечи будет открываться ордер в зависимости от МА, ниже по селл выше по бай, он закрывается по тп или сл, дальше ордер открывается по цене открытия следующей свечи. Если ордер сработал по сл, то следующий ордер открывается по удвоенному лоту по цене открытия следующей свечи, и так по кругу!!!

Код не соответствует данному описанию в части касающейся входа при наличии открытого ордера (в предыдущем посте писал), в части касающейся входа увеличенным ордером после СЛ (об этом событии бот не узнает).
Надо навести порядок в логике программы, расставить комментарии в коде. Если бот работает по ценам открытия Н1, то не надо считать ордера и проверять условия на каждом тике.
Вот, например, получилось 8 бычьих свечей - у Вас 8 ордеров Бай, потом цена развернулась - это что, пока все ордера Бай не закроются по СЛ Селл не откроется?
Ссылка на сообщение
Поделиться на другие сайты

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

открытый ордер остается единственным пока не сработает стоплосс или тп, только потом со следующей свечи открывается следующий ордер в зависимости от МА. и так далее
походу я начинаю догонять с открыванием ордеров, но тормозит меня открытия ордера после сработывания стоплосса????????
extern double Lots = 0.1;
extern int Slippage = 5;
extern double StopLoss = 10;
extern double TakeProfit = 10;
extern double Multiplier = 2;

extern int Magic = 12345;


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

int ticket;
double sl, tp;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if ( Digits == 3 || Digits == 5 )
{
Slippage *=10;
StopLoss *=10;
TakeProfit *=10;

}

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


}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int start()
{
// получаем цену МА

double ima = iMA(Symbol(), PERIOD_H1, 20, 5, MODE_EMA, PRICE_CLOSE, 1);

// Если цена Ask больше МА, то открываем ордер на покупку

if (Ask> ima && CountTrades() == 0)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
{
sl = NormalizeDouble(Ask-StopLoss*Point,Digits);
tp = NormalizeDouble(Ask+TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};
}
}

// Если цена Bid менше МА, то открываем ордер на продажу

else if (Bid {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
sl = NormalizeDouble(Bid + StopLoss*Point,Digits);
tp = NormalizeDouble(Bid - TakeProfit*Point,Digits);
if (OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)){};
}
}

return(0);
}
// Если ордер закрылся по стоплоссу то удваеваем лот

????????????????????????????

// Описание фунции CountTrades
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);
}

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

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


открытый ордер остается единственным пока не сработает стоплосс или тп, только потом со следующей свечи открывается следующий ордер в зависимости от МА. и так далее
походу я начинаю догонять с открыванием ордеров, но тормозит меня открытия ордера после сработывания стоплосса????????

Узнать о Лосе просто:
- после успешного открытия ордера запоминаем oldBalans=AccountBalans();
- если количество ордеров = 0, смотрим if (oldBalans>AccountBalans()) - значит Лось.
Также советую идти простыми путями, например: после открытия очередного ордера запоминать его лот, прайс и всё, что Вам нужно, а не при каждом тике искать последний.
Ссылка на сообщение
Поделиться на другие сайты

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

благодарствую, знания из прошлого опыта по программированию потихоньку вспоминаю! буду дальше разбираться!!!!!!!!!!!!!
Ссылка на сообщение
Поделиться на другие сайты

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

Здраствуйте ребята,вопросик таков. Можно сделать функцию что бы она открывала ордера по мартину в мультивалютном советнике ?
Написал скрипт, функции взял из урока пишем советник на мартингейле не много упростил его удалил от туда пару строк проверки на символ = ордерсимвол, проверку на магик оставил.В общем попробовал использовать он не чего не открывает, в журнале пишет по причине 0. Я так понимаю что он просто не выбрал ордера. Потому как например открыты 7 ордеров по разным валютным парам и в разных направлениях,мне нужно что бы при соответствующим условии то есть от показания индикатора он открывал точно такие же ордера по тем же парам в том же направлении но с увеличенным лотом. Либо что то с логикой не так,либо эти функции не подходят для мультивалютника. От сюда возник этот вопрос ?

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

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

Здравствуйте,

Пишу небольшую утилиту и возникла необходимость передать большую строку из dll в mql код. Dll написана на C# и работает с терминалом через Unmanaged exports (Взято из этой статьи http://www.mql5.com/ru/articles/249 раздел 2.5). Небольшие строки передаются хорошо, но если строка слишком длинная она либо обрезается, либо возникает исключение, либо из за этого вылетает терминал. В C# коде строка представлена StringBuilder'ом как и описано в статье.

Пробовал использовать Managed Mapped File но почему то файл созданный в памяти в C# не удается прочитать из MQL.

Если вы сталкивались с такой же проблемой - дайте знать.

Во вложении пример кода MQL и проект dll для Visual Studio 2012.

C#MQLExample.zip

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

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

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

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

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

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

Войти

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

Войти

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


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

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