Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 766

 
logut:
мне input double lots = 0.01;
input int takeprofit = 100;
input int stoploss = 100;
 extern int magic = 123;
//----------------+
int start()
{


 


//---------------+


int ticket=OrderSend(Symbol(),OP_BUYLIMIT,lots,Ask,3,Ask +stoploss* Point, Ask + takeprofit* Point,NULL,123,120,CLR_NONE);






return(0);

} 

нужна подсказка как написать советник с отложкой я в этом деле новичок месяц голову ломаю есть набросок
Советник реализует некую стратегию. Стратегия подразумевает условия входа в рынок и выхода из него. Поэтому, нельзя ставить вопрос: как написать советника для отложенных ордеров? Можно задать вопрос: как написать процедуру открытия отложенных ордеров? А дальше, отложенные ордера -  что это? Вот Вам и отвечают: отложенные ордера устанавливаются на некотором расстоянии от текущей цены. Поэтому в переменных команды/функции OrderSend() для отложенных ордеров нельзя ставить текущую цену (Ask/Bid). А надо ставить цену на некоем растоянии от текущей цены с учетом требований/ограничений Вашего Дилингового Центра
[Eliminado]  
ikatsko:
Советник реализует некую стратегию. Стратегия подразумевает условия входа в рынок и выхода из него. Поэтому, нельзя ставить вопрос: как написать советника для отложенных ордеров? Можно задать вопрос: как написать процедуру открытия отложенных ордеров? А дальше, отложенные ордера -  что это? Вот Вам и отвечают: отложенные ордера устанавливаются на некотором расстоянии от текущей цены. Поэтому в переменных команды/функции OrderSend() для отложенных ордеров нельзя ставить текущую цену (Ask/Bid). А надо ставить цену на некоем растоянии от текущей цены с учетом требований/ограничений Вашего Дилингового Центра
я попробовал поставить PRICE_OPEN но как указать на какое растояние
 
logut:
я попробовал поставить PRICE_OPEN но как указать на какое растояние
Это и есть главный вопрос стратегии, Вашей стратегии, которую Вы хотите реализовать в виде советника. Например, есть текущая цена инструмента (например, EURUSD). По Вашей стратегии, например, предполагается, что если цена пойдет вверх на 20 пунктов, то (!) обязательно потом цена начнет снижаться. Поэтому Вы ставите отложенный ордер на расстоянии 20 пунктов от текущей цены. 
 
ikatsko:
Это и есть главный вопрос стратегии, Вашей стратегии, которую Вы хотите реализовать в виде советника. Например, есть текущая цена инструмента (например, EURUSD). По Вашей стратегии, например, предполагается, что если цена пойдет вверх на 20 пунктов, то (!) обязательно потом цена начнет снижаться. Поэтому Вы ставите отложенный ордер на расстоянии 20 пунктов от текущей цены. 

Молодец. Пять балов.

 
ikatsko:
Это и есть главный вопрос стратегии, Вашей стратегии, которую Вы хотите реализовать в виде советника. Например, есть текущая цена инструмента (например, EURUSD). По Вашей стратегии, например, предполагается, что если цена пойдет вверх на 20 пунктов, то (!) обязательно потом цена начнет снижаться. Поэтому Вы ставите отложенный ордер на расстоянии 20 пунктов от текущей цены. 

Ждите шквал вопросов. Что такое пункт, кто такой цена Ask, Bid, хто есть дилинговый центр, что значит стратегия ... короче - жуть... В конечном итоге, тыкнете в сцыль на Учебник.

 
logut:
мне input double lots = 0.01;
input int takeprofit = 100;
input int stoploss = 100;
 extern int magic = 123;
//----------------+
int start()
{


 


//---------------+


int ticket=OrderSend(Symbol(),OP_BUYLIMIT,lots,Ask,3,Ask +stoploss* Point, Ask + takeprofit* Point,NULL,123,120,CLR_NONE);






return(0);

} 

нужна подсказка как написать советник с отложкой я в этом деле новичок месяц голову ломаю есть набросок
Руль, багажник, как быть Москва?
 
logut:
я попробовал поставить PRICE_OPEN но как указать на какое растояние

Можно я Вам помогу? Это у меня хорошо получается! Вставить Ваш код с кнопкой SRC и смотрите, как красиво! 

input double lots = 0.01;
input int takeprofit = 100;
input int stoploss = 100;
 extern int magic = 123;
//----------------+
int start()
{


 


//---------------+


int ticket=OrderSend(Symbol(),OP_BUYLIMIT,lots,Ask,3,Ask +stoploss* Point, Ask + takeprofit* Point,NULL,123,120,CLR_NONE);






return(0);

} 

Вам же остаётся только с помощью знаний из Учебника и Документации заполнить всё недостающее! Все всегда начинали так же, и Вы не исключение. Желаю успехов в учении!

 
AlexeyVik:

А прежде чем повторять чью-то чушь не можешь проверить?

Не важно по какому времени функция StringToTime() отсчитывает прошедшие секунды от 01.01.1970 00:00:00 по GMT, UTC, времени сервера или локальному времени, главное что от этой даты до указанного времени прошло XXX секунд. А когда ты для проверки ставишь контрольное время то это время отсчитывается так-же от 01.01.1970 00:00:00 по указанному тобой времени. То-есть в условии if(TimeCurrent() >= StringToTime("23:15") это означает что если по времени сервера от 01.01.1970 00:00:00 прошло секунд столько-же или больше чем контрольное XXX секунд. И никакой путаницы в этом нет.

Специально для тебя сделал скрин, почитай комментарий и потом поэкспериментируй. 

Твоя проблема может заключаться в том, что торговля может заканчиваться в 23:00

Не сразу заметил ответ. Ну если честно я не совсем понял что ты имеешь в виду, утверждая что в этом нет путаницы.

То есть как "не важно по какому времени функция StringToTime() отсчитывает прошедшие секунды"?

Функция берет по сути вообще левую дату  (я считаю что дата локального ПК - левая) и сравнивает с ней текущее время сервера брокера, почему это может быть не важно? 

Из приведенного скрина коммент говорит о том что время на твоем локальном компе опережает время брокера на 1 час, то есть сдвиг по GMT больше. Если бы он был на X часов меньше, то было бы критично, как в случае о котором я писал, про пятницу.

А по поводу окончания времени торговли. Я полагаю что для функции StringToTime() не должно иметь значение когда брокер заканчивает торговый день или неделю... 

 
tuner:

Не сразу заметил ответ. Ну если честно я не совсем понял что ты имеешь в виду, утверждая что в этом нет путаницы.

То есть как "не важно по какому времени функция StringToTime() отсчитывает прошедшие секунды"?

Функция берет по сути вообще левую дату  (я считаю что дата локального ПК - левая) и сравнивает с ней текущее время сервера брокера, почему это может быть не важно? 

Из приведенного скрина коммент говорит о том что время на твоем локальном компе опережает время брокера на 1 час, то есть сдвиг по GMT больше. Если бы он был на X часов меньше, то было бы критично, как в случае о котором я писал, про пятницу.

А по поводу окончания времени торговли. Я полагаю что для функции StringToTime() не должно иметь значение когда брокер заканчивает торговый день или неделю... 

У меня нет другого объяснения.

Если сейчас в Москве 11:40, то от 01.01.1970 до текущего времени прошло XXX секунд.

Когда в Лондоне, к примеру, будет 11:40 то количество секунд будет такое-же как и в Москве сейчас... Только потому, что 01.01.1970 в Лондоне было на столько-же позже на сколько отличается текущее время. В сравнение идёт не указанное время, а только количество прошедших секунд.

Попробуй сам написать формулу расчёта количества секунд от 01.01.1970 00:00:00

Для короткого промежутка времени будет такая формула. От начала текущего месяца прошло 6*24*60*60 + 11*60*60 + 59*60 + текущее значение секунд по часам на которые ты смотришь.

 

Понятное дело что сравнение идет по количеству секунд, прошедших с 70-го года, но в этом количестве секунд учтено все - и дата и время.

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

Задача: при наступлении пятницы расчитать время (datetime) окончания торговли в этот день с учетом строковой переменной "21:30".

У меня изначально было такое решение:

datetime EndTrading;

if(TimeDayOfWeek(TimeCurrent())==5)     // если сейчас пятница, например возьмем сегодняшний день, первый тик 2014.11.07 00:00
  EndTrading=StringToTime("21:30");     // подразумевается что тут должно быть время пятницы...

if(TimeDayOfWeek(TimeCurrent())==5)     // если настала пятница
  if(TimeCurrent()>EndTrading)          // и время удовлетворяет условию
    Print("Настала пятница и текущее время больше чем 21:30");

 А теперь прикол: указанный в коде принт выскочит в пятницу, но не после 21:30, а в 00:00 на первом тике.

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

В тестере же будет все ок и принт выскочит как и должен в пятницу после 21:30. Ну разве не путаница?