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

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


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

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


кстати, почему у меня нет пересечение..,? В условиях я указал "if(iMA1 >= iMA2 && iMA3 > iMA2 && CountBuy() == 0)" ---- если быстрая МА больше или ровнос средней МА а так же тяжелая МА больше средней МА и нет покупок - то покупка.... условия на продажу противоположные. Или я неправильно условия создал?



Это не пересечение.
Пересечение - это когда быстра машка в один момент времени были ниже медленной, а вдругой момент выше.
Вот смотри код на примере двух машек:
string Signal(){
double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2);
double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double Slow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1);
if (PrevFast Slow) return("Buy");
if (PrevFast > Slow && CurFast return("No Signal");
}

Добавлено: 06-07-2013 16:33:48

Так точнее:
string Signal(){
double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2);
double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double CurSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double PrevSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 2);
if (PrevFast CurSlow) return("Buy");
if (PrevFast > PrevSlow && CurFast return("No Signal");
} Изменено пользователем Romhacker
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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



кстати, почему у меня нет пересечение..,? В условиях я указал "if(iMA1 >= iMA2 && iMA3 > iMA2 && CountBuy() == 0)" ---- если быстрая МА больше или ровнос средней МА а так же тяжелая МА больше средней МА и нет покупок - то покупка.... условия на продажу противоположные. Или я неправильно условия создал?



Это не пересечение.
Пересечение - это когда быстра машка в один момент времени были ниже медленной, а вдругой момент выше.
Вот смотри код на примере двух машек:
string Signal(){
double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2);
double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double Slow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1);
if (PrevFast Slow) return("Buy");
if (PrevFast > Slow && CurFast return("No Signal");
}

Добавлено: 06-07-2013 16:33:48

Так точнее:
string Signal(){
double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2);
double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double CurSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1);
double PrevSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 2);
if (PrevFast CurSlow) return("Buy");
if (PrevFast > PrevSlow && CurFast return("No Signal");
}



Большое спасибо!! Я немного переделал сову и добавил функцию закрытие ордеров при противоположном сигнале. Уже все хорошо)) Плюсую!
*******************
Еще один вопрос:
как в советник добавить осциллятор? Добавить функции одно, но я не знаю, как записать их. Например тогда, когда МАКД пересекает нулевую линию сверху вниз - продажа. Или когда осциллятор Вильямса АО меняет цвет на красный - продажа. Как вставлять такие функции? Просто в уроке не говорят, как создавать совы на основе осцилляторов. С уважением!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Еще один вопрос:
как в советник добавить осциллятор? Добавить функции одно, но я не знаю, как записать их. Например тогда, когда МАКД пересекает нулевую линию сверху вниз - продажа. Или когда осциллятор Вильямса АО меняет цвет на красный - продажа. Как вставлять такие функции? Просто в уроке не говорят, как создавать совы на основе осцилляторов. С уважением!



Ну это читать надо, как использовать индикаторы.
Например здесь _http://docs.mql4.com/ru/indicators
Или гугле поищи. Я раньше искал советники с исходниками и там смотрел, как используются нужные мне индикаторы.
Вот например как выглядит вызов функции AO:
double val=iAO(NULL, 0, 2);
Насколько я понял, если значение АО на анализируемом баре больше, чем на предыдущем, то индикатор рисует зелёный бар, если меньше, то красный.
Соответствено функция может выглядеть так:
string SignalAO(){
double CurAO = iAO(NULL, 0, 1);
double PrevAO = iAO(NULL, 0, 2);
if(CurAO > PrevAO) return("Buy");
if(CurAO return("No Signal");
}
Ссылка на сообщение
Поделиться на другие сайты

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


А как вставить в советник функцию при появлении противоположного сигнала закрыть все ордера ? :(


Я знаю, как сделать, что бы сделки закрывались при противоположном сигнале. Вот смотри:
Сначала пишешь переименую с функцией тру или фолс
Цитата

extern bool CloseRevers = true;


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

Цитата

void CLOSEORDER(int ord)
{
for (int i=0; i {
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==123)
{
if (OrderType()==OP_BUY && ord==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
if (OrderType()==OP_SELL && ord==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
}
}
}
}
//--------------------------------------------------------------------




Вот например функция открытие сделки :
Цитата

if(MA10>MA20 && MA11MA3 && CountBuy() {
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
SL = NormalizeDouble(Ask - StopLoss * Point, Digits);

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, 0, 0, "123", Magic, 0, Blue);
if(ticket > 0)
{
if (CloseRevers) CLOSEORDER(OP_SELL);
if (OrdersTotal()==0)

if(OrderSelect(ticket, SELECT_BY_TICKET) == true)
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Black);
}
}



Посмотри внимательно, в инструкции видно, что перед тем, как модифицировать сделку, проверяет, нет ли противоположного сигнала. Если есть - сделка закрывается. как то так.
Вот код, который, который вызывает функцию проверки нет ли противоположного сигнала и нужно ли закрыть сделку:
Цитата

if (CloseRevers) CLOSEORDER(OP_SELL);
if (OrdersTotal()==0)


Код ставишь тогда, когда в инструкции сделка уже открыта. Так как это идет, как модификация.
Я новичок в мкл4. Если что то не выходит - пиши, разберем!

Добавлено: 07-07-2013 14:13:02

Люди, помогите. Не подскажите, как добавить трейлинг стоп в советник?????
Очень нужно....!
Написать саму функцию смогу, но не знаю как её вставить в инструкцию....

Добавлено: 07-07-2013 14:41:18

И еще один вопрос: очень важный!
как добавить еще одну функцию открытие сделки?? Например, что бы еще открывалась сделка на отбой от тяжелой машки. тяжелая машка есть, только как указать условия на отбой? Буду очень благодарен! Изменено пользователем samuliak
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет!
xbms, спасибо огромное за уроки!

samuliak

Цитата

Не подскажите, как добавить трейлинг стоп в советник?????


Я к третьему уроку добавил ступенчатый трал. Вписать можно и вначале, если есть открытые ордера - тралим.
Цитата

if (CountSell() > 0 || CountBuy() > 0) Tral();



Выписать отбой от машки - имхо, можно используя свечные функции iOpen(), iClose() и т.д.

Test_0003.mq4

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

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


Всем привет!
xbms, спасибо огромное за уроки!

samuliak

Цитата

Не подскажите, как добавить трейлинг стоп в советник?????


Я к третьему уроку добавил ступенчатый трал. Вписать можно и вначале, если есть открытые ордера - тралим.
Цитата

if (CountSell() > 0 || CountBuy() > 0) Tral();



Выписать отбой от машки - имхо, можно используя свечные функции iOpen(), iClose() и т.д.

не подскажите, как это можно сделать? Большое спасибо!
Ссылка на сообщение
Поделиться на другие сайты

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

При компиляции выдает три ошибки как их исправить не знаю. Есле комуто не трудно Исправте пожайлуста. Я только учусь. За рание спасибо.

extern double Lots = 0.1;
extern int TakeProfit = 50;
extern int Step = 50;
extern double Multiplier = 2;
extern int Slippage = 5;
extern int Magic = 123;


int ticket;
double price, TP, lastlot;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
Step *= 10;
Slippage *= 10;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (CountTrades() == 0)
{
double ima = iMA(Symbol(),PERIOD_H1,14,0,MODE_SMA,PRICE_CLOSE,1);
if (Ask > ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket,OrderOpenPrice(),0,TP,0);
}
}
else if (Bid {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket,OrderOpenPrice(),0,TP,0);
}
}
}
else
{
int order_type = FindLastOrderType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if (Ask {
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(),OP_BUY,lastlot,Ask,Slippage,0,0,"",Magic,0,Blue);
if (ticket > 0)
ModifyOrders(OP_BUY);

}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if (Bid {
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(),OP_SELL,lastlot,Bid,Slippage,0,0,"",Magic,0,Red);
if (ticket > 0)
ModifyOrders(OP_SELL);

}
}
}
return(0);
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype)
{
double avgprice = 0;
order_lots = 0;

price = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);


if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit * Point, Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit * Point, Digits);

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

}
}

}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
double oldlots;
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)
{
double oldopenprice;
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 FindLastOrderType()
{
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);
}
//+------------------------------------------------------------------+

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

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

2 ошибки компиляции:
1. в функции void ModifyOrders(int otype)
double avgprice = 0;
order_lots = 0;
Нужно ставить после первой переменной запятую а не точку с запятой
double avgprice = 0,
order_lots = 0;

или добавлять тип для order_lots
double avgprice = 0;
double order_lots = 0;

2. в функции int CountTrades()
строчка if (OrderSymbol() == Symbol && OrderMagicNumber() == Magic)
Symbol это функция, поэтому необходимо добавлять скобки Symbol(), что-бы компилятор знал что именно вызов функции
исправленная строка
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

Логические ошибки программы я не проверял, только ошибки компиляции.

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

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

3. 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);
}

4. Грамматическая

""При компиляции выдает три ошибки как их исправить не знаю. Если кому-то не трудно Исправьте пожалуйста. Я только учусь. Заранее спасибо.""

;;)

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
samuliak, сорри, я как писатель - не очень (решил попробовать после первого урока от Сергея)
Прям моя любимая фраза:
Цитата

Киса, я хочу вас спросить, как художник — художника: вы рисовать умеете?


Так что, код я долго рожать буду. Да и со временем не очень.
В теории всё просто... Если цена под машкой, значит идёт отбиваться снизу ;). Нам нужен коридор +- 10пп от МА, заходит - продаём, пролетает - стоп (или переворот, или лок). Можно выставить SellStop на нижней границе, если цена в коридоре...
Для покупки, наоборот.

PS. Мой Мартин:

Test_0004_Martin.mq4

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

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


samuliak, сорри, я как писатель - не очень (решил попробовать после первого урока от Сергея)
Прям моя любимая фраза:

Цитата

Киса, я хочу вас спросить, как художник — художника: вы рисовать умеете?


Так что, код я долго рожать буду. Да и со временем не очень.
В теории всё просто... Если цена под машкой, значит идёт отбиваться снизу ;). Нам нужен коридор +- 10пп от МА, заходит - продаём, пролетает - стоп (или переворот, или лок). Можно выставить SellStop на нижней границе, если цена в коридоре...
Для покупки, наоборот.

PS. Мой Мартин:


Большое спасибо. Но у меня пока что другая ситуация. Сам себе придумываю легкие совы и пишу их. Вот уже часть сделал , но наткнулся на одну проблему.
Например у меня уже есть условие на покупку и на продажу, можно ли добавить еще отдельные условие, что бы сделка открывалась еще по ним.
Вот например, как я думаю это сделать, но не очень выходит....
Цитата

if(здесь условие на покупку)
{
(а здесь инструкция по их исполнению)
}
else if(другие условие на покупку)
{
(инструкция по исполнению других условий на покупку)
}



И НИЖЕ ТАК ЖЕ НА ПРОДАЖУ:

Цитата


if(здесь условие на продажу)
{
(а здесь инструкция по их исполнению)
}
else if(другие условие на продажу)
{
(инструкция по исполнению других условий на продажу)
}



через функцию else получится или нет? В первым условиях и инструкциях у меня прописано, что бы сделка открывалась при пересечении машек в сторону тяжелой машке. Хочу добавить еще одно отдельное условие, что при отбитие от тяжелой МА ставилась отложка. Ну вот не получается пока что. Не знаю ,где написать условие.
Условие на покупку и продажу у меня такие:

Цитата

if(High[0] >= MA3 && CountSellStop() {
(инструкция на отложку продажу);
}
if(Low[0] {
(инструкция на отложку покупку);
}

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

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

через функцию else получится или нет?


Да. Именно для этого else и существует.
Цитата

if(High[0] >= MA3 && CountSellStop()


High[0] - хай текущего бара. Я бы написал так:
Цитата

if(Bid >= MA3 && CountSellStop()

А так мы узнаем, что цена пришла снизу...
Цитата

if(Bid >= MA3 && High[2]





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

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


samuliak

Цитата

через функцию else получится или нет?


Да. Именно для этого else и существует.
Цитата

if(High[0] >= MA3 && CountSellStop()


High[0] - хай текущего бара. Я бы написал так:
Цитата

if(Bid >= MA3 && CountSellStop()

А так мы узнаем, что цена пришла снизу...
Цитата

if(Bid >= MA3 && High[2]



гм....логично...)))
большое спасибо, сейчас буду смотреть. Еще если не тяжело, можете сказать, как использовать исциплятор в советнике?? Я не могу его прикрутить.

Добавлено: 09-07-2013 12:50:31

Всем гуру, у меня возникла проблема.
Пишу советник на основе машек (пока что, буду дополнять его). В советнике 3 условия на входа в сделку:
- if(MA10>MA20 && MA11MA3 && CountBuy()
- else if(Ask MA3 && High[1] > MA3 && CountBuyStop()
- else if(Ask MA3 && High[1] > MA3 && CountSellLimit()
Смысл тот, что стоповые и лимитные сделки не ставятся на на заданное количество пунктов. Я указал переменную PipStop, но все равно не выходит. Прикрепляю советник, прошу помочь мне, что бы сделки открывались точно на заданное количество пунктов после выполнение условий. Плюс у меня за много сделок открывает, не могу это исправить. Помогите мне в моих ошибках. буду очень благодарен!


*******************

Кстати, было бы отлично, если бы следующие урок был о том, как писать функции, которые нужны для советников. Например, расчет лота, ММ, закрытие позиции по обратному сигналу или частичное закрытие, трейлинг и так дальше. Просто в инете много инфы, но непонятно. Когда смотришь видео Сергея, он более точно показывает и лучше воспринимается информация. Буду очень благодарен!

машки_1.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано (изменено)
samuliak, с осциллятором пока не помогу.
Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.
Lots *= 10 - это тоже вроде лишнее. Изменено пользователем Vorchunozavr
Ссылка на сообщение
Поделиться на другие сайты

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


samuliak, с осциллятором пока не помогу.
Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.
Lots *= 10 - это тоже вроде лишнее.


еще раз большое спасибо. С лимитника я разобрался, уже вроде все понял. Ну вот только у меня в тестере никак не открываются продажные сделки. Ни селл стоп ли селл. Только покупки. Посмотрите в код и скажите, кто может, с чем это связано?

машки_1.mq4

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

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



samuliak, с осциллятором пока не помогу.
Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.
Lots *= 10 - это тоже вроде лишнее.


еще раз большое спасибо. С лимитника я разобрался, уже вроде все понял. Ну вот только у меня в тестере никак не открываются продажные сделки. Ни селл стоп ли селл. Только покупки. Посмотрите в код и скажите, кто может, с чем это связано?


Во-первых, тебе уже говорили что умножение лота на 10 ни к чему, убери его нафиг.
Во-вторых у тебя стопы на продажу стоят не правильно, тейкпрофит получается выше открытия, СЛ ниже, по-ходу с покупок скопировал но не поменял знаки.
По отложенным ордерам на селл, тоже скопировал с покупок, условие не поменял, внимательнее просмотри.
NormalizeDouble(Bid - PipStop * Point, Digits) - это лучше вынести отдельной строкой, подписать его как OpenPrice например и вписывать в OrderSend, а не тупо всю функцию тулить в OrderSend
И еще условия у тебя не очень понятны... MA10MA21, чтоб младшая машка была выше... я не пойму логики честно говоря. MA20 else if(Ask MA3 && High[1] > MA3 && CountSellStop() else if(Bid >= MA3 && High[2] Зачем делаешь кучу условий на отложки...
Вообщем работать надо на совой и работать...
Изменено пользователем Dimasyok
Ссылка на сообщение
Поделиться на другие сайты

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




samuliak, с осциллятором пока не помогу.
Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.
Lots *= 10 - это тоже вроде лишнее.


еще раз большое спасибо. С лимитника я разобрался, уже вроде все понял. Ну вот только у меня в тестере никак не открываются продажные сделки. Ни селл стоп ли селл. Только покупки. Посмотрите в код и скажите, кто может, с чем это связано?


Во-первых, тебе уже говорили что умножение лота на 10 ни к чему, убери его нафиг.
Во-вторых у тебя стопы на продажу стоят не правильно, тейкпрофит получается выше открытия, СЛ ниже, по-ходу с покупок скопировал но не поменял знаки.
По отложенным ордерам на селл, тоже скопировал с покупок, условие не поменял, внимательнее просмотри.
NormalizeDouble(Bid - PipStop * Point, Digits) - это лучше вынести отдельной строкой, подписать его как OpenPrice например и вписывать в OrderSend, а не тупо всю функцию тулить в OrderSend
И еще условия у тебя не очень понятны... MA10MA21, чтоб младшая машка была выше... я не пойму логики честно говоря. MA20 else if(Ask MA3 && High[1] > MA3 && CountSellStop() else if(Bid >= MA3 && High[2] Зачем делаешь кучу условий на отложки...
Вообщем работать надо на совой и работать...

Мне кто то на форуме РуФорум писал, что условие для пересечение МА пишется так.... может наврали)
Вчера я над кодом посмотрел и много чего изменил. Там, где одинаковые условие - выкинул. Просто сделал, что бы при выполнение условий ставились 2 отложки на пробой и отбой.
Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись?
Ссылка на сообщение
Поделиться на другие сайты

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


Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись?



достаточно просто, проверить время, ну как минимум час:

if (TimeHour(TimeCurrent()) == 0)
CloseAllOrders(); // тут Ваша функция закрытия ордеров


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

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


Цитата


Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись?



достаточно просто, проверить время, ну как минимум час:

if (TimeHour(TimeCurrent()) == 0)
CloseAllOrders(); // тут Ваша функция закрытия ордеров


Таким образом в ноль часов будут закрыты все ордера...


Тогда нужно написать еще функцию CloseAllOrders()....блин)
Ссылка на сообщение
Поделиться на другие сайты

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


Цитата


Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись?



достаточно просто, проверить время, ну как минимум час:

if (TimeHour(TimeCurrent()) == 0)
CloseAllOrders(); // тут Ваша функция закрытия ордеров


Таким образом в ноль часов будут закрыты все ордера...

Правильнее будет назвать функцию ClosePendingOrders.
Ссылка на сообщение
Поделиться на другие сайты

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

Столкнулся с проблемой, сов работает в окне м5, для реализации стратегии использует данные индикатора с ТФ h1, так если при тестировании наложить на график этот индюк, то видно что данные поступающие в сов с индюка разнятся с налаженным. Различие в работе двух индюшат хорошо видно после окончания тестирования. В примере ниже расхождения не значительные, но они есть, почему?

111.jpg

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

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

XBMS привет в очередной раз. Конечно , не надеюсь получить положительное одобрение с твоей стороны , но , есть пожелание следующего урока по созданию индикатора Зиг Заг. В иннете много сказанно о нем и я даже начал писать советник по нему. Но урока не нашел ((( Положительная перспектива. Но сам индюк иногда дает сбои , глючит и это вызывает у меня сомнения в его надежности во-времени. Индюка я подобрал естественно не своего, по какому принципу он рассчитывает точки Хай и Лоу, а главное их фильтрует - непонятно. Если бы Ты провел урок по написанию индикатора Зиг Заг , я думаю всем было бы полезно ! Я прикреплю его к письму , для наглядности. У него особое отличие от других, он выдает с начало все хай , а потом лоу , поэтому по нему легко отследить максимальные и минимальные сигналы.
Спасибо.

AlexSTAL_ZigZagProfExtra.mq4

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

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

Всем здравствуйте!

По поводу сова на внешнем индикаторе ТМА.
Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. При компиляции, перезагрузке терминала или если залезть в св-ва эксперта -- все по новому: открывает, сопровождает, закрывает (ся) ордер, и опять тишина.
Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. А этого не происходит.
В чем может быть проблема?
При компиляции ошибок нет, в журнале тоже.
На скрине: ордер, обведенный кружочком, сов открыл сам, но при повторной компиляции, когда я увидел, что цена вышла за пределы канала, а советник молчит.

123.JPG
Test_TMA.mq4

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

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


Всем здравствуйте!

По поводу сова на внешнем индикаторе ТМА.
Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. При компиляции, перезагрузке терминала или если залезть в св-ва эксперта -- все по новому: открывает, сопровождает, закрывает (ся) ордер, и опять тишина.
Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. А этого не происходит.
В чем может быть проблема?
При компиляции ошибок нет, в журнале тоже.
На скрине: ордер, обведенный кружочком, сов открыл сам, но при повторной компиляции, когда я увидел, что цена вышла за пределы канала, а советник молчит.


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

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



Всем здравствуйте!

По поводу сова на внешнем индикаторе ТМА.
Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. При компиляции, перезагрузке терминала или если залезть в св-ва эксперта -- все по новому: открывает, сопровождает, закрывает (ся) ордер, и опять тишина.
Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. А этого не происходит.
В чем может быть проблема?
При компиляции ошибок нет, в журнале тоже.
На скрине: ордер, обведенный кружочком, сов открыл сам, но при повторной компиляции, когда я увидел, что цена вышла за пределы канала, а советник молчит.


нет обнуления переменной количества ордеров после закрытия.


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

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

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

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

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

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

Войти

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

Войти

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


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

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