Ответ
 
Опции темы
Старый 06.12.2013, 14:00   #2061 (permalink)
Местный знаток
 
Аватар для Milord
 
Регистрация: 26.03.2011
Сообщений: 596
Репутация: 705
Milord - Milord - Milord - Milord - Milord - Milord - Milord -
Сказал(а) спасибо: 897
Поблагодарили 702 раз(а) в 192 сообщениях
Поинты: 547
Сообщение от eevviill Посмотреть сообщение

Скрытый текст

PHP код:
////////////////////////////////////////////////////////////////////////////////
void Close_all()
{
for(
int i=OrdersTotal()-1i>=0i--)
 {
 if(
OrderSelect(iSELECT_BY_POS))
 {
 if(
OrderMagicNumber()==magic)
 {
 if(
OrderSymbol()==Symbol())
 {
 
bool ticket_ex=false;
 for (
int j_ex 0;j_ex MaxAttemptsj_ex++)
 {
 while(
IsTradeContextBusy()) Sleep(pause_if_busy*1000);
 
RefreshRates();
 
 if(
OrderType()==OP_BUY ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow); 
 if(
OrderType()==OP_SELLticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);
if(
OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMITticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
 if(
ticket_ex==true)break;
 }
 }
 }
 }
 }
 

[свернуть]
спасибо за быстрый ответ, жаль нет логики работы,впрочем будем посмотреть))
думаю можно код упростить, вопрос будет ли он работать, например отложек у меня нет,магик не важен,символ валюты текущий по счету....вот что получилось...гляньте плиз свежим взглядом будет ли так работать? и куда "пихать" этот кусок кода,я пока что начинающий "ас" MQL4)))
надеюсь дочитать ваши уроки программирования...)
PHP код:
void Close_all()
{
for(
int i=OrdersTotal()-1i>=0i--)
 {
 if(
OrderSelect(iSELECT_BY_POS))
 {
 
bool ticket_ex=false;
 for (
int j_ex 0;j_ex MaxOrdersj_ex++)
 {
 while(
IsTradeContextBusy()) Sleep(pause_if_busy*1000);
 
RefreshRates();
 
 if(
OrderType()==OP_BUY ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow); 
 if(
OrderType()==OP_SELLticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);
ticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
 if(
ticket_ex==true)break;
 }
 }
 }
 }
 }
 


_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 06.12.2013 в 14:07.
Milord вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.12.2013, 14:42   #2062 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Milord Посмотреть сообщение
спасибо за быстрый ответ, жаль нет логики работы,впрочем будем посмотреть))
думаю можно код упростить, вопрос будет ли он работать, например отложек у меня нет,магик не важен,символ валюты текущий по счету....вот что получилось...гляньте плиз свежим взглядом будет ли так работать? и куда "пихать" этот кусок кода,я пока что начинающий "ас" MQL4)))
надеюсь дочитать ваши уроки программирования...)
PHP код:
void Close_all()
{
for(
int i=OrdersTotal()-1i>=0i--)
 {
 if(
OrderSelect(iSELECT_BY_POS))
 {
 
bool ticket_ex=false;
 for (
int j_ex 0;j_ex MaxOrdersj_ex++)
 {
 while(
IsTradeContextBusy()) Sleep(pause_if_busy*1000);
 
RefreshRates();
 
 if(
OrderType()==OP_BUY ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow); 
 if(
OrderType()==OP_SELLticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);
ticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
 if(
ticket_ex==true)break;
 }
 }
 }
 }
 }
 

Проверку на символ можно убирать только если гарантированно не будет ордеров другого символа. Например, при работе в тестере.
При работе в тестере можно упростить, убрав
while(IsTradeContextBusy()) Sleep(pause_if_busy*1000);
RefreshRates();

Это пользовательская функция. Её код надо разместить вне функций start(), init(), deinit()

А внутри функции start() надо просто её вызвать строкой
int start()
{
if(
A>B)
{
OrderSend(.... );
}

if(
t>P)
//закрываем все ордера
{
Close_all();}

return(
0);
}



ps Для работы на реальном счёте надо не упрощать, а усложнять функцию.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 06.12.2013 в 14:47.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (07.12.2013), Milord (11.12.2013)
Старый 06.12.2013, 20:51   #2063 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Все же тот код для запрета открытия сделки сразу после закрытия предидущей по стопу не работает.
Проверил принтами в логах:
1. пишет что закрыт первый ордер
2. ответ от функции проверки -1 (нужно больше 0)
3. открывается новый ордер
4. ответ проверки 0 (т.е. текущий бар)

Может это работает так только в тестере, но вопрос остается открытым.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.12.2013, 14:48   #2064 (permalink)
Почётный гражданин
 
Аватар для Dobryj
 
Регистрация: 07.06.2012
Сообщений: 222
Репутация: 325
Dobryj Dobryj Dobryj Dobryj
Сказал(а) спасибо: 384
Поблагодарили 293 раз(а) в 127 сообщениях
Поинты: 100
Привет!
Помогите разобраться вроде не сложно должно быть


extern datetime Start_time=D'2003.08.04 00:00';

int start()
{

datetime Forward_1=Start_time+166*Period()*60;

return(0);
}
прибавляет 166 календарных дней ,
как переделать что бы прибавлял к дате 166 торговых дней(баров)?
Dobryj вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.12.2013, 15:24   #2065 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Цитата:
как переделать что бы прибавлял к дате 166 торговых дней(баров)?
Если нужны бары, то бары и прибавляй - функция iBars
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dobryj (11.12.2013), eevviill (11.12.2013)
Старый 11.12.2013, 15:31   #2066 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от Dobryj Посмотреть сообщение
Привет!
Помогите разобраться вроде не сложно должно быть


extern datetime Start_time=D'2003.08.04 00:00';

int start()
{

datetime Forward_1=Start_time+166*Period()*60;

return(0);
}
прибавляет 166 календарных дней ,
как переделать что бы прибавлял к дате 166 торговых дней(баров)?
Сообщение от ansol Посмотреть сообщение
Если нужны бары, то бары и прибавляй - функция iBars
Нет, iBars() тут мимо.
Forward_1=Time[iBarShift(NULL,Period(),Start_time)-166];
История 2003+ года должна быть доступна.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dobryj (11.12.2013), eevviill (11.12.2013)
Старый 11.12.2013, 16:11   #2067 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Цитата:
Нет, iBars() тут мимо.
Forward_1=Time[iBarShift(NULL,Period(),Start_time)-166];
Смотря что ищем. На периоде D1 1 бар=1 день В выходные баров нет, т.е. к заданному добавляем 166 и получаем бар через 166 рабочих дней (правда, еще праздники есть )
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dobryj (11.12.2013), eevviill (11.12.2013)
Старый 11.12.2013, 16:25   #2068 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от ansol Посмотреть сообщение
Смотря что ищем. На периоде D1 1 бар=1 день В выходные баров нет, т.е. к заданному добавляем 166 и получаем бар через 166 рабочих дней (правда, еще праздники есть )
Ты почти у цели. Только iBars возвращает количество баров на графике, а не между датами.
Я не совсем понял вопрос, если надо от прошлой даты посчитать 166 торговых дней, то надо использовать +166*PERIOD_D1*60; Ну а если от текущей вперёд, то наверное придётся брать PERIOD_W1*60 и PERIOD_D1*60
И в этом случае надо чётко понимать как определить количество полных недель и дней в тех 166 днях. Их, как я понимаю, может быть и не 166.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
ansol (11.12.2013), Dobryj (11.12.2013), eevviill (11.12.2013)
Старый 11.12.2013, 17:09   #2069 (permalink)
Почётный гражданин
 
Аватар для Dobryj
 
Регистрация: 07.06.2012
Сообщений: 222
Репутация: 325
Dobryj Dobryj Dobryj Dobryj
Сказал(а) спасибо: 384
Поблагодарили 293 раз(а) в 127 сообщениях
Поинты: 100
Сообщение от qqmber Посмотреть сообщение
Нет, iBars() тут мимо.
Forward_1=Time[iBarShift(NULL,Period(),Start_time)-166];
История 2003+ года должна быть доступна.
Не получается ...
историю подкачал перепроверил все тоже самое !
вот пример от 2003.06.02 отложим 166 баров получим
дату 2004.01.20
при +166*PERIOD_D1*60 будут посчитаны календарные дни !
а надо отложить конкретно 166 свеч от даты (торговых дней)
и еще вопрос если считать в будущее как это с выходными посчитать ?

Скрытый текст

#property copyright "Dobryjj"
#property link "Dobryjj@gmail.com"
#property show_inputs
//-----------------------------INPUT parameters-------------------------------------------------------------------------//
extern datetime Start_time=D'2003.06.02 00:00';

//----------------------------------------------------------------------------------------------------------------------//
int start()
{
datetime Forward_1=Time[iBarShift(NULL,Period(),Start_time)-166];
string var1=TimeToStr(Forward_1,TIME_DATE);
Comment(var1);


return(0);
}
[свернуть]
Dobryj вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.12.2013, 17:52   #2070 (permalink)
Почётный гражданин
 
Аватар для Dobryj
 
Регистрация: 07.06.2012
Сообщений: 222
Репутация: 325
Dobryj Dobryj Dobryj Dobryj
Сказал(а) спасибо: 384
Поблагодарили 293 раз(а) в 127 сообщениях
Поинты: 100
Сообщение от ansol Посмотреть сообщение
Смотря что ищем. На периоде D1 1 бар=1 день В выходные баров нет, т.е. к заданному добавляем 166 и получаем бар через 166 рабочих дней (правда, еще праздники есть )
Напишите пожалуйста код , не понимаю как ibars использовать при подсчете
Dobryj вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.12.2013, 17:53   #2071 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от Dobryj Посмотреть сообщение
Напишите пожалуйста код , не понимаю как ibars использовать при подсчете
НИКАК.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dobryj (11.12.2013), eevviill (13.12.2013)
Старый 11.12.2013, 18:03   #2072 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Пример из хелпа:
PHP код:
datetime some_time=D'2004.03.21 12:00';
int      shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
Print(
"shift of bar with open time ",TimeToStr(some_time)," is ",shift); 
Т.е. shift мы получили. Теперь из него надо вычесть 166 - это будет бар, который отстоит от полученного вперед на 166 баров.
Вам что нужно в результате, время открытия вычислить из него?
Это будет iTime(символ,PERIOD_D1,shift-166)
Или с самим баром что-то делать?
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dobryj (11.12.2013), eevviill (13.12.2013)
Старый 11.12.2013, 18:04   #2073 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от Dobryj Посмотреть сообщение
Не получается ...
историю подкачал перепроверил все тоже самое !
вот пример от 2003.06.02 отложим 166 баров получим
дату 2004.01.20
при +166*PERIOD_D1*60 будут посчитаны календарные дни !
а надо отложить конкретно 166 свеч от даты (торговых дней)
и еще вопрос если считать в будущее как это с выходными посчитать ?

Скрытый текст

#property copyright "Dobryjj"
#property link "Dobryjj@gmail.com"
#property show_inputs
//-----------------------------INPUT parameters-------------------------------------------------------------------------//
extern datetime Start_time=D'2003.06.02 00:00';

//----------------------------------------------------------------------------------------------------------------------//
int start()
{
datetime Forward_1=Time[iBarShift(NULL,Period(),Start_time)-166];
string var1=TimeToStr(Forward_1,TIME_DATE);
Comment(var1);


return(0);
}
[свернуть]
А ты проверил это?
PERIOD_D1 это 1 дневная свеча!!! А не календарный день.
А как посчитать вперёд, я предположил перед твоими последними постами. Было-бы нужно это мне, я написал-бы в Comment() дату которая получится и определил-бы как правильней посчитать. Может MathCeil(166/5)*PERIOD_W1*60+(166 % 5)*PERIOD_D1*60
Может делить на 5 дней в неделю, а потом прибавить по 2 дня на неделю. В общем вряд-ли кто будет заниматься такими испытаниями вместо тебя.

Последний раз редактировалось AlexeyVik; 11.12.2013 в 18:07.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dobryj (11.12.2013), eevviill (13.12.2013)
Старый 11.12.2013, 18:06   #2074 (permalink)
Почётный гражданин
 
Аватар для Dobryj
 
Регистрация: 07.06.2012
Сообщений: 222
Репутация: 325
Dobryj Dobryj Dobryj Dobryj
Сказал(а) спасибо: 384
Поблагодарили 293 раз(а) в 127 сообщениях
Поинты: 100
Сообщение от ansol Посмотреть сообщение
Пример из хелпа:
PHP код:
datetime some_time=D'2004.03.21 12:00';
int      shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
Print(
"shift of bar with open time ",TimeToStr(some_time)," is ",shift); 
Т.е. shift мы получили. Теперь из него надо вычесть 166 - это будет бар, который отстоит от полученного вперед на 166 баров.
Вам что нужно в результате, время открытия вычислить из него?
Это будет iTime(символ,PERIOD_D1,shift-166)
Или с самим баром что-то делать?
мне надо на этом баре вертикальную линию нарисовать .
Спасибо получилось посчитать на истории , а ситуация с будущим , может есть у кого практика прописать виртуальные бары как буд-то они уже существуют )))

Последний раз редактировалось Dobryj; 11.12.2013 в 18:29.
Dobryj вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.12.2013, 19:52   #2075 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от Dobryj Посмотреть сообщение
мне надо на этом баре вертикальную линию нарисовать .
Спасибо получилось посчитать на истории , а ситуация с будущим , может есть у кого практика прописать виртуальные бары как буд-то они уже существуют )))
Aaaaa! Всё-же заставил посчитать....
Поставь куда угодно этот комент и посчитай на календарике какая дата будет через 3 недели и 1 день и сравни с тем что увидишь. Это будет второе января нового года.
Comment(TimeToStr(iTime(NULL, PERIOD_W1, 0)+3*PERIOD_W1*60+(DayOfWeek()+1)*PERIOD_D1*60, TIME_DATE));

iTime(NULL, PERIOD_W1, 0) - время открытия текущей недели
+3*PERIOD_W1*60 - плюс 3 недели
+(DayOfWeek()+1)*PERIOD_D1*60 - плюс прошедшие дни с начала текущей недели и плюс ещё один день

В твоём случае 166 торговых дней это 33 недели и 1 день

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

Вот-же было тебе сказано
Сообщение от AlexeyVik Посмотреть сообщение
Ты почти у цели. Только iBars возвращает количество баров на графике, а не между датами.
Я не совсем понял вопрос, если надо от прошлой даты посчитать 166 торговых дней, то надо использовать +166*PERIOD_D1*60; Ну а если от текущей вперёд, то наверное придётся брать PERIOD_W1*60 и PERIOD_D1*60
И в этом случае надо чётко понимать как определить количество полных недель и дней в тех 166 днях. Их, как я понимаю, может быть и не 166.

Последний раз редактировалось AlexeyVik; 11.12.2013 в 19:57.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dobryj (11.12.2013), eevviill (13.12.2013)
Старый 13.12.2013, 08:52   #2076 (permalink)
Новичок форума
 
Аватар для ctmcn
 
Регистрация: 02.04.2011
Сообщений: 35
Репутация: 7
ctmcn
Сказал(а) спасибо: 12
Поблагодарили 6 раз(а) в 6 сообщениях
Поинты: 36
Здравствуйте !
Подскажите пожалуйста, кто знает, как реализовать выполнение.

Советник последовательно должен обрабатывать два уровня условий:
Первый уровень обрабатывает критерии на текущих (нулевых) барах таймфреймов с Н4 по М1. Если условия на первом уровне выполнены, то советник переходит к обработке уже критериев только Второго уровня, и только при выполнении условий уже второго уровня, дает команду на открытие ордера.

Выглядит так (для Buy):
________________________________________
Level_1 (четыре варианта)
----------------------------------------------
if ((Н4 && Н1 && М30 && М15 && М5 && М1) ||
(Н4 && Н1 && М30 && М15 && М5 && М1) ||
(Н4 && Н1 && М30 && М15 && М5 && М1) ||
(Н4 && Н1 && М30 && М15 && М5 && М1))
----------------------------------------------
Нужнот вставить сюда Level_2
А<В
----------------------------------------------
{
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell

P.S. Критерии на Level_2 - ВСЕГДА действуют во времени ПОЗЖЕ критериев на Level_1. И поэтому ВСЕГДА, когда выполняются условия на Level_2, то на Level_1 условия уже НЕ ВЫПОЛНЯЮТСЯ.

С уважением,
заранее спасибо.
ctmcn вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 13.12.2013, 09:20   #2077 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ctmcn Посмотреть сообщение
Здравствуйте !
Подскажите пожалуйста, кто знает, как реализовать выполнение.

Советник последовательно должен обрабатывать два уровня условий:
Первый уровень обрабатывает критерии на текущих (нулевых) барах таймфреймов с Н4 по М1. Если условия на первом уровне выполнены, то советник переходит к обработке уже критериев только Второго уровня, и только при выполнении условий уже второго уровня, дает команду на открытие ордера.

Выглядит так (для Buy):
________________________________________
Level_1 (четыре варианта)
----------------------------------------------
if ((Н4 && Н1 && М30 && М15 && М5 && М1) ||
(Н4 && Н1 && М30 && М15 && М5 && М1) ||
(Н4 && Н1 && М30 && М15 && М5 && М1) ||
(Н4 && Н1 && М30 && М15 && М5 && М1))
----------------------------------------------
Нужнот вставить сюда Level_2
А<В
----------------------------------------------
{
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell

P.S. Критерии на Level_2 - ВСЕГДА действуют во времени ПОЗЖЕ критериев на Level_1. И поэтому ВСЕГДА, когда выполняются условия на Level_2, то на Level_1 условия уже НЕ ВЫПОЛНЯЮТСЯ.

С уважением,
заранее спасибо.
Opn_B1=false;
Cls_S1=false;
Объяви на глобальном уровне.
При выполнении условия 1, будешь тру ставить. А<В && Opn_B1
При выполнении условия 2, фолс.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ctmcn (13.12.2013)
Старый 13.12.2013, 11:35   #2078 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от eevviill Посмотреть сообщение
Opn_B1=false;
Cls_S1=false;
Объяви на глобальном уровне.
При выполнении условия 1, будешь тру ставить. А<В && Opn_B1
При выполнении условия 2, фолс.
Сейчас разложу по полкам.
Например сигнал для бай.
В глобальных
PHP код:
bool open_b1;

Сигнал 1 на бай
if(!open_b1 && ... && ...)
 
open_b1=true;

Сигнал 2 на бай
if(open_b1 && ... && ...)
{
...
open_b1=false;

eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 13.12.2013, 15:53   #2079 (permalink)
Новичок форума
 
Аватар для max020780
 
Регистрация: 22.12.2009
Сообщений: 44
Репутация: 11
max020780
Сказал(а) спасибо: 6
Поблагодарили 12 раз(а) в 7 сообщениях
Поинты: 30

По умолчанию помогите разобраться


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

PHP код:
if( NumberOfPositionsBay(Symbol())==&& NumberOfPositionsSell_otl(Symbol())==&&GetOrderLotsOtlSell(Symbol())==start_Lot*&& GetOrderLotsBay(Symbol())==start_Lot)
{

 
      for (
int k 0OrdersTotal(); k++) 
      {
      if (
OrderSelect(k,SELECT_BY_POS)==true// Если есть следующий
// Анализ ордеров:
//------------------------------------------------------ 3 --
if (OrderSymbol()!= Symbol()) continue; // Не наш фин.инструм.
      
      
if (OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP ) {
     
      
tp_sell_otl=NormalizeDouble(s-(2*Point)-spred-(GetOrderPriceBay(Symbol())-(s-Point-spred))/Point/2*PointDigits);
      
sl_sell_otl=NormalizeDouble(GetOrderPriceBay(Symbol()), Digits);
      
ModifyOrder(
      
OrderModify(OrderTicket(),NormalizeDouble(s-Point-spredDigits),sl_sell_otl,tp_sell_otl,0);
       
      }
      
       
       if (
OrderSymbol() == Symbol() && OrderType() == OP_BUY  ) {
       
      
sl_buy_otl=NormalizeDouble(s-spred-PointDigits);
      
OrderModify(OrderTicket(), OrderOpenPrice(),sl_buy_otl,OrderTakeProfit(),0);
      
      }
      }
      }

max020780 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 13.12.2013, 17:26   #2080 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
1) Надо проверять(для торговли на реал счёте) или ордер уже имеет необходимые параметры.
Например
PHP код:
if(OrderStopLoss()!=NormalizeDouble(sl,Digits))
OrderModify(...,NormalizeDouble(sl,Digits),...); 
2) Скорее всего неправильные стопы или цена отложки передаются для модификации. Загляни в журнал есть ли там ошибки.
Кто такой s,spred?

Последний раз редактировалось eevviill; 13.12.2013 в 17:31. Причина: php
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 20:09. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO