Magic из даты

 

Всем привет!

Есть советник, работающий на пробой временных хаи/лоу. 

Можно ли как-то поправить функцию меджика, чтобы он брал его из даты открытия ордера? А точнее - он берет диапозон (допустим) с 9-10 утра. И по хаи/лоу этого диапозона ставит отложки на пробой. Как сделать так, чтобы он выставил отложки именно этого диапозона и, по срабатыванию отложек, новых в этом месте не ставил? Но при этом, чтобы второй (такой же) мог это делать с 15-16? 

 

Есть какие-нибудь варианты? 

 

Можешь разделить цену на Point и полученное число назначить магиком.

Можешь составить так StrToInteger(StringConcatenate(Day(), Hour()));

 


Это хорошая идея ... Конечно можноо магик формировать из даты

 
YuraZ:


Это хорошая идея ... Конечно можноо магик формировать из даты

Но все равно надо прибавлять префикс для идентификации принадлежности ордера данному советнику.
 
AlexeyVik:

Можешь разделить цену на Point и полученное число назначить магиком.

Можешь составить так StrToInteger(StringConcatenate(Day(), Hour()));

Заранее прошу прощения, я в программировании не силен....

Это получается мне нужно в советнике прописать Magic= StrToInteger(StringConcatenate(Day(), Hour())); ??? 

 

Видимо я вчера не совсем точно задачку описал. Чтобы они открывались в разное время (9-10 и 15-16) я поставлю 2 советника. Нужно немножко другое. Чтобы меджик сам себя рисовал из даты. Так сказать сегодня он ставит ордера и присваивает им меджик  1031 (дата) + 1 (заданное мной число) = 10311 (примерно такой) и чтобы завтра он смог открыть в этом же временном диапазоне новые (если предыдущий день не закрылся). Вроде понятно объяснил )))

Насколько это сложно и где это в функции ему прописать? Могу код советника выложить, если надо.

 
Eisbrecher:

Заранее прошу прощения, я в программировании не силен....

Это получается мне нужно в советнике прописать Magic= StrToInteger(StringConcatenate(Day(), Hour())); ??? 

 

Видимо я вчера не совсем точно задачку описал. Чтобы они открывались в разное время (9-10 и 15-16) я поставлю 2 советника. Нужно немножко другое. Чтобы меджик сам себя рисовал из даты. Так сказать сегодня он ставит ордера и присваивает им меджик  1031 (дата) + 1 (заданное мной число) = 10311 (примерно такой) и чтобы завтра он смог открыть в этом же временном диапазоне новые (если предыдущий день не закрылся). Вроде понятно объяснил )))

Насколько это сложно и где это в функции ему прописать? Могу код советника выложить, если надо.

вы хотите удалить гланды через заднепроходное отверстие,

чем вас не устраивает OrderOpenTime()???

 
pako:

вы хотите удалить гланды через заднепроходное отверстие,

чем вас не устраивает OrderOpenTime()???

Я могу и глаз на жо.. пытаться натянуть ))) Суть не в этом.

Что мне даст время открытия ордера? Если цена через 15 минут вернется к этому уровню, то он мне там же новый ордер откроет.... Если я правильно понимаю.... И тогда, во время качелей, так сказать, он мне насшибает их с 10-ок за 2 часа....  А мне нужно, чтобы он открывал 1 сделку на 1 суточный пробой и держал ее до TP или SL, но на следующие сутки открывал еще один от новых хаи/лоу заданного диапазона. И при этом, чтобы не мешал второму советнику открываться по тому же принципу, но в другое время.... 

 
Eisbrecher:

Я могу и глаз на жо.. пытаться натянуть ))) Суть не в этом.

Что мне даст время открытия ордера? Если цена через 15 минут вернется к этому уровню, то он мне там же новый ордер откроет.... Если я правильно понимаю.... И тогда, во время качелей, так сказать, он мне насшибает их с 10-ок за 2 часа....  А мне нужно, чтобы он открывал 1 сделку на 1 суточный пробой и держал ее до TP или SL, но на следующие сутки открывал еще один от новых хаи/лоу заданного диапазона. И при этом, чтобы не мешал второму советнику открываться по тому же принципу, но в другое время.... 

if ( 9 <  OrderOpenTime() <  10 )  проходим мимо

else открываем позицию 

if ( 15 <  OrderOpenTime() <  16 )  проходим мимо

else открываем позицию  

зачем вам еще один советник??? 

 
Eisbrecher:

Заранее прошу прощения, я в программировании не силен....

Это получается мне нужно в советнике прописать Magic= StrToInteger(StringConcatenate(Day(), Hour())); ??? 

 

Видимо я вчера не совсем точно задачку описал. Чтобы они открывались в разное время (9-10 и 15-16) я поставлю 2 советника. Нужно немножко другое. Чтобы меджик сам себя рисовал из даты. Так сказать сегодня он ставит ордера и присваивает им меджик  1031 (дата) + 1 (заданное мной число) = 10311 (примерно такой) и чтобы завтра он смог открыть в этом же временном диапазоне новые (если предыдущий день не закрылся). Вроде понятно объяснил )))

Насколько это сложно и где это в функции ему прописать? Могу код советника выложить, если надо.

Ну так посмотрел-бы приведённые в примере функции и сам мог догадаться заменить Hour() на Month(), поменять местами как это удобно тебе и получил-бы такую строку

Magic= StrToInteger(StringConcatenate(Month(), Day(), 1));

Хотя на мой взгляд 1 лучше писать впереди.

Magic= StrToInteger(StringConcatenate(1, Month(), Day()));

Но это предложение не проверялось, экспромт, так сказать... Если потом надо будет читать этот магик и извлекать из него дату, то надо обеспечить равное количество знаков в мае и ноябре когда Month() возвращает 5 или 11, так-же и с числом месяца. Наверное будет лучше взять месяц и дату из структуры.

 
pako:

if ( 9 <  OrderOpenTime() <  10 )  проходим мимо

else открываем позицию 

if ( 15 <  OrderOpenTime() <  16 )  проходим мимо

else открываем позицию  

зачем вам еще один советник??? 

 

Это Вы мне предлагаете слишком многое в сове менять. Либо я совсем не понимаю Вашу идею/предложение. Мне проще 2 советника поставить. Я же не программист ))) Тем более, что для каждого диапозона мне нужно разные ТП и СЛ выставлять. Это очень многое в советнике поменять надо. А так - он вполне полноценный (вроде), нужно просто функцию Магика изменить. Но все равно спасибо за участие в решении задачки ;-)))

AlexeyVik:

Ну так посмотрел-бы приведённые в примере функции и сам мог догадаться заменить Hour() на Month(), поменять местами как это удобно тебе и получил-бы такую строку

Magic= StrToInteger(StringConcatenate(Month(), Day(), 1));

Хотя на мой взгляд 1 лучше писать впереди.

Magic= StrToInteger(StringConcatenate(1, Month(), Day()));

Но это предложение не проверялось, экспромт, так сказать... Если потом надо будет читать этот магик и извлекать из него дату, то надо обеспечить равное количество знаков в мае и ноябре когда Month() возвращает 5 или 11, так-же и с числом месяца. Наверное будет лучше взять месяц и дату из структуры.

Спасибо. Вот такой вариант мне вполне понятен. Эксперимент возьму на себя (мне же это надо)))  О результатах отпишусь.

 

Еще раз всем спасибо. 

 

Что-то у меня ничего не получается.... Может я его не туда сую?

 

Вот куда его и как правильно запхать, этот Меджико-заменитель?:

extern int      Magic=10001;

extern int      ATRPeriod = 12;

extern int      AsiaStartTime = 2;            //Время начала азиатской сессии

extern int      AsiaEndTime = 11;             //Время окончания азиатской сессии

extern int      CloseTime = 15;               //Время закрытия открытых ордеров

extern int      MinATRPercent=35;             //Мин % 

extern int      MaxATRPercent=55;             //Макс %  

extern int      Take=180;                     //TakeProfit

extern int      Stop=70;                      //StopLoss

extern bool     Tral=false;                   //Трал обычный да/нет                  

extern int      TS=30;                        //Уровень трала                          

extern int      TralStep=15;                  //Шаг трала 

extern bool     UseSound       = True;        //Использовать звуковой сигнал да/нет

extern bool     MM=false;                     //Включение ММ да/нет

extern double   MMRisk=1;                     //Risk Factor

extern double   Lots = 0.1;                   //Лот

extern bool     Visual=true;

int  MaxTries=5,Dec;

int  i, cnt=0, ticket, mode=0, digit=0, total, OrderToday=0;

double  StopLoss, TakeProfit, Lotsi=0, spread, MinStop, DayATR, max, min, p1, p2;

int LastVol;

string  name="Asia";

string SoundSuccess   = "alert.wav";   // Звук успеха

string SoundError     = "timeout.wav"; // Звук ошибки

datetime t1, t2;

color ColorToShow;  

     

Причина обращения: