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

От xbms, 13 апреля, 2013 в Уголок Программиста

#151


кстати, почему у меня нет пересечение..,? В условиях я указал "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");
}

Изменено 6 июля, 2013 пользователем Romhacker

#152



кстати, почему у меня нет пересечение..,? В условиях я указал "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");
}



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


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



Ну это читать надо, как использовать индикаторы.
Например здесь _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");
}
#154


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


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

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

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

Изменено 7 июля, 2013 пользователем samuliak

#155

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

samuliak

Цитата

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


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

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



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

Test_0003.mq450 скач.

#156


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

samuliak

Цитата

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


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

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



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

не подскажите, как это можно сделать? Большое спасибо!
#157

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

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);
}
//+------------------------------------------------------------------+

#158

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)

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

#159

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. Грамматическая

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

;;)

Изменено 8 июля, 2013 пользователем 00000

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

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


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

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

Test_0004_Martin.mq452 скач.

#161


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

Цитата

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


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

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


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

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



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

Цитата


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



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

Цитата

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

Изменено 9 июля, 2013 пользователем samuliak

#162
samuliak
Цитата

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


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

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


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

if(Bid >= MA3 && CountSellStop()

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

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





#163


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.mq418 скач.

Изменено 9 июля, 2013 пользователем samuliak

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

Изменено 9 июля, 2013 пользователем Vorchunozavr

#165


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


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

машки_1.mq420 скач.

#166



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] Зачем делаешь кучу условий на отложки...
Вообщем работать надо на совой и работать...

Изменено 10 июля, 2013 пользователем Dimasyok

#167




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 отложки на пробой и отбой.
Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись?
Автор#168
Цитата


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



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

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


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


Цитата


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



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

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


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


Тогда нужно написать еще функцию CloseAllOrders()....блин)
#170


Цитата


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



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

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


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

Правильнее будет назвать функцию ClosePendingOrders.
#171

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

111.jpg

#172

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

AlexSTAL_ZigZagProfExtra.mq436 скач.

#173

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

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

123.JPG
Test_TMA.mq440 скач.

#174


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

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


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



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

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


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


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

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

Перейти к списку тем
Форум · 2.0.20260627.0025