возможно ли открывать автоматически позицию в конкретно заданное время? - страница 3

 
don_Rumata писал(а) >>

кстати, в том "советнике" есть косяк.. на демке его щас гоняю, открывает одну и туже запланированную позицию два-три раза с расхождением в 5-7 мин(( хотя и тут есть и плюс (если выдержет депо 2*стоплосс) тейкпрофит*2)

плюса не вижу, если указано в условии, открыть, тогда то, то и надо открыть и все, иначе получаеться совсем нето что программируеш

 
don_Rumata писал(а) >>

Добрый день. Подскажите плиз возможно ли открывать автоматически позицию в конкретно заданное время? киньте сцылку на советника или сюда же кусок кода.

допустим сразу в коде жестко указать:

пара - eurusd

тип - селл

лот - 0,1

тейкпрофит - 50

стоплосс - 50

время открытия - каждый день в 9:00 GTM

+ никаких подтверждений на открытие, автоматом

думается мне, что эт очень просто реализовать.. просто для программеров)

Всё уже давно реализовано. Просто берите и пользуйтесь. AutoGraf 4.

 
don_Rumata >>:

ну код, ты писал)) а сделки действительно открываются в эти часы, так и надо.. расчитанно на медвежий рынок.. ты код то глянь, глянь

В вашем варианте советника стоят значения: там где я поставил "+" в это время советник сможет совершить сделку, где "-" не сможет.

extern int MINUTE = 0;  
extern int HOUR_1 = 23; //+++++++++++++
extern int HOUR_2 = 18; //+++++++++++++
extern int HOUR_3 = 12; //-------------
extern int HOUR_4 = 11; //+++++++++++++
extern int HOUR_5 = 8;  //-------------
extern int HOUR_6 = 7;  //-------------
extern int HOUR_7 = 6;  //+++++++++++++
extern int HOUR_8 = 3;  //-------------
extern int HOUR_9 = 2;  //+++++++++++++

Т.е из-за логической ошибки в 2, 6, 11, 18, 23 часа ордера выставляться смогут, а в 3, 7, 8, 12 нет. Это наглядно видно в результатах тестирования.

Тут тоже самое что и у вас, только исправленный вариант. (Вроде работает.)
Файлы:
don_1_1.mq4  5 kb
 

А здесь добавил проверку: если предыдущий ордер не закрыт, то торговлю на вести.

Файлы:
don_1_2.mq4  6 kb
 

Murman, маладцом.

ты расскажи че думаешь по этому? за коменты к коду - гуд! пиши че думаешь там же в коде.

можна добавить: если позиция закрылась со с\л, то перевернуться с параметрами лот - тот же, стоплосс\2, профит*2 (если бес перекуру 200 пипсов пролетел, то и откат будет хороший)

 

пф.. седня не усну походу..

еще мысль: если у нас идет убыток (до стоплосса селла)

-50 открываем Бай (лот-тот же, стоплосс_2=10 (???), тейкпрофит_2=20 (???))

-100 открываем Бай (лот-тот же, стоплосс_2*2=20 (???), тейкпрофит_2*2=40 (???))

-150 открываем Бай (лот-тот же, стоплосс_2*3=30 (???), тейкпрофит_2*2=60 (???))

(???) - взято с потолка

 
xrust >>:

по коду . смотрим что говорит сцылка :

int Hour( )

Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).
Замечание: при тестировании последнее известное время сервера моделируется.

это значит что во время исполнения блока старт() эти данные не обновляються, кончно для часов это особой роли не имеет, но вот задерка по минутам будет солидной

опять же обращаемся к сцылке :

и находим там вот это !

int TimeHour( datetime time)
Возвращает час для указанного времени.

Я понял что ни чего не понял. Я понял разницу функции int Hour() и int TimeHour(datetime time), спасибо что обратили внимание, раньше я об этом как-то особо не задумывался. Но как эта разница может повлиять на данный код не понял.

extern int MINUTE = 0;
extern int HOUR = 23;
extern int StopLoss=200;
extern int TakeProfit=9;
extern double Lots=0.1;

int ticket_sell;
int start()

     if(Hour()==HOUR&&Minute()>=MINUTE)
      {
       if(ticket_sell==0)
        {
         ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Открытие по времени",89584,0,Red);
        }  
      }

Теперь по порядку по коду.

Если код большой и пока выполняются проверки, и т.д и т.п, а время для открытия позиции уже подошло функция

Minute()

не даст выполнить условие т.к. известно последнее время сервера (прошлое время) и условие будет выполнено только на следующем старте, а функция

TimeMinute( datetime time) 

даст выполнить условие т.к вернёт настоящие время. А вот про задержку именно в этом коде не понял. Хотя он в этом плане и не верный с точки зрения программиста. Скажите туда я думаю?


PS. Т.е. условие надо поставить так:

if(TimeHour(TimeCurrent())==HOUR&&TimeMinute(TimeCurrent())>=MINUTE)
 
don_Rumata >>:

...ты расскажи че думаешь по этому...

Ели чесно не думал. Т.к с таким подходм T/P=9 и S/L=200 далеко не уедешь. ДЦ такую работу МТС порежет на куски. Здесь на форуме много по этому поводу написано.

Да и соотношение прибыль/риск не куда не годится. Что можно сюда добавить? Вернуть Buy на место, добавить например скользящую среднюю (Moving Average) и окрывать сделки в направлении MA, добавить адптивные S/l и T/P в зависимости от волатильности рынка и много чего ещё. А потом посмотреть на всё это, выкинуть, и начать торговать руками. :))

don_Rumata >>:

еще мысль: если у нас идет убыток (до стоплосса селла)

-50 открываем Бай (лот-тот же, стоплосс_2=10 (???), тейкпрофит_2=20 (???))

-100 открываем Бай (лот-тот же, стоплосс_2*2=20 (???), тейкпрофит_2*2=40 (???))

-150 открываем Бай (лот-тот же, стоплосс_2*3=30 (???), тейкпрофит_2*2=60 (???))

(???) - взято с потолка

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

PS.

Вот изменил последний вариант советника:

Логика осталась та-же.

1 Первую часть советника убрал в массив. Т.е сделал массив с переменными HOUR и цикл с обращением к этому массиву.

2 Функции

Hour() &&  Minute()
заменил на
TimeHour(TimeCurrent()) &&  TimeMinute(TimeCurrent())
Файлы:
don_22.mq4  3 kb
Причина обращения: