См. прицеп. Размещаете его содержимое в папку Experts терминала. Выбираете таймфрейм интересующего Вас торгуемого инструмента, бросаете на его график сОва,
при этом задаете параметры для открытия ордера во внешних переменных эксперта:
Далее ждете образование нового бара на выбранном Вами таймфрейме инструмента...
При открытии ордера с рынка экспертом сравниваете время его открытия и время открытия нового бара.
Роман, как обещал рассказываю, что получается в реальности при работе с советником "открытие на открытии". Во первых советник срабатывает сразу на следующем тике после размещения на 1-часовом графике, а на открытии следующей свечи он открывает уже вторую сделку. Почему, я пока понять не могу. Во вторых цена открытия сделки все-таки не совпадает с ценой открытия новой свечи:
2012.02.24,12:00,1.3392,1.3405,1.3383,1.3387,768 - свеча открывается по 1,3392, а ордер срабатывает по 1.3390. В настройках я указываю проскальзывание в 1 пункт. Если указать 0 пунктов, то советник вообще не сработает, правильно я понимаю?
Лог я приложил. Для меня все таки остается важным что ордер на открытие совпадал с ценой открытия свечи.
Здравствуйте, господа. Буду признателен за пояснение.
Верно ли я понимаю, что еслив коде последовательнозаписаны команды OrderDeleteи OrderSendи еслисоветник получает сигнал на исполнение обеих команд (снятие + установка) на тике №1, то:
- эти две команды не могут быть исполнены на одном и том же тике №1, а их исполнение растягивается минимум на 3 тика, причем
- на тике №1 подается команда OrderDelete;
- после подачи OrderDelete только со следующим тиком №2 возвращается результат, и только теперь на этом же тике №2 может быть подана команда OrderSend;
- результат команды OrderSend будет известен только на тике №3.
Так ли это?
И верно ли утверждение, что возможности на одном и том же тике отсылать две команды в МТ нет?
Здравствуйте, господа. Буду признателен за пояснение.
Верно ли я понимаю, что еслив коде последовательнозаписаны команды OrderDeleteи OrderSend и еслисоветник получает сигнал на исполнение обеих команд (снятие + установка) на тике №1, то:
- эти две команды не могут быть исполнены на одном и том же тике №1, а их исполнение растягивается минимум на 3 тика, причем
- на тике №1 подается команда OrderDelete;
- после подачи OrderDelete только со следующим тиком №2 возвращается результат, и только теперь на этом же тике №2 может быть подана команда OrderSend;
- результат команды OrderSend будет известен только на тике №3.
Так ли это?
И верно ли утверждение, что возможности на одном и том же тике отсылать две команды в МТ нет?
Советник пишу на МТ4.
Благодарю.
тик - это новая котировка. И связи со временем выполнения команд OrderDelete и OrderSend нету
если идут новости, да + проскальзывания, то пока у вас простой OrderSend выполняется пройдет с десяток тиков. А если на рынке ночной флет, то за один тик обе команды пройти могут успеть
Все зависит от того, насколько быстро идут тики. Вообще функции, которые возвращают значение, OrderDelete, OrderSend и т.п. исполняются не асинхронно, т.е. до тех пор, пока не пройдет целиком вся операция и не будет выдан код ошибки (или NO_ERROR в случае успеха), следующий оператор выполняться не будет. Другое дело, что за это время могут пробежать несколько тиков, но они функцией start() обработаны не будут.
Также возможна коллизия, когда, например, у одного ордера срабатывает стоплосс, а другой вы пытаетесь открыть/закрыть советником на том же тике. Тогда сервер может в ряде случаев не дать исполнить операцию.
тик - это новая котировка. И связи со временем выполнения команд OrderDelete и OrderSend нету
если идут новости, да + проскальзывания, то пока у вас простой OrderSend выполняется пройдет с десяток тиков. А если на рынке ночной флет, то за один тик обе команды пройти могут успеть
МТ, насколько я понимаю, тянет информацию с сервера потиково (а сервер, в свою очередь, дает ответы по командам одновременно с отсылкой новых тиков, это оптимизирует расходы по времени). И раньше, чем придет новый тик, ничего не известно. Я это имел ввиду. Но, может, я ошибаюсь в этом предположении? Вопрос связан скорее не с десятком тиков, а со вторым указанным Вами вариантом, когда тик медленный.
Верно ли я Вас понял, таким образом, что получение отклика по команде №1 не является обязательным условием, чтобы перейти к команде №2 и полностью ее обработать?
Отклик по команде - это "несущественная" часть команды? Его наличие не критично, чтобы перейти к следующей команде?
Ниже мы вступили в дискуссию с alsu, и, как мне кажется, я предполагал то же, что он: что наличие отклика критически важно. Вы же пишите, что на одном тике могут быть отработаны две команды. Выходит, информация с сервера приходит вообще без связи с потоком котировок?
alsu: Все зависит от того, насколько быстро идут тики. Вообще функции, которые возвращают значение, OrderDelete, OrderSend и т.п. исполняются не асинхронно, т.е. до тех пор, пока не пройдет целиком вся операция и не будет выдан код ошибки (или NO_ERROR в случае успеха), следующий оператор выполняться не будет. Другое дело, что за это время могут пробежать несколько тиков, но они функцией start() обработаны не будут.
Также возможна коллизия, когда, например, у одного ордера срабатывает стоплосс, а другой вы пытаетесь открыть/закрыть советником на том же тике. Тогда сервер может в ряде случаев не дать исполнить операцию.
Т.е. ответ на ваши вопросы - нет, это не так))
Как это не так, если получается, что как раз "так", по Вашим же словам? )) Или я чего-то опять не понял? Вы пишете мне в ответ, что функции исполняются так, что следующий оператор исполняется только после отработки кода ошибки предыдущего. Я, мне кажется, это и предполагал: что "две команды не могут быть исполнены на одном и том же тике №1", потому что отклик - тот самый ответ или код ошибки - появляется самое раннее с новым тиком. Или нет? Или отклики по командам идут отдельным по времени потоком, не связанным с потоком котировок? Возможно, моя ошибка в том, что я предположил, что результаты исполнения команд возвращаются с новой котировкой?
Конечно, я имел ввиду в первую очередь ситуацию, когда тики медленные.
Скажите, пожалуйста, можно-ли сделать так, чтобы советник закрывал только положительные сделки, несмотря на сигнал индикатора о закрытии сделки и закрывать их при следующих сигналах индикатора, по мере их выхода в профит?
МТ, насколько я понимаю, тянет информацию с сервера потиково (а сервер, в свою очередь, дает ответы по командам одновременно с отсылкой новых тиков, это оптимизирует расходы по времени). И раньше, чем придет новый тик, ничего не известно. Я это имел ввиду. Но, может, я ошибаюсь в этом предположении? Вопрос связан скорее не с десятком тиков, а со вторым указанным Вами вариантом, когда тик медленный.
Верно ли я Вас понял, таким образом, что получение отклика по команде №1 не является обязательным условием, чтобы перейти к команде №2 и полностью ее обработать?
Отклик по команде - это "несущественная" часть команды? Его наличие не критично, чтобы перейти к следующей команде?
Ниже мы вступили в дискуссию с alsu, и, как мне кажется, я предполагал то же, что он: что наличие отклика критически важно. Вы же пишите, что на одном тике могут быть отработаны две команды. Выходит, информация с сервера приходит вообще без связи с потоком котировок?
Спасибо.
Отклики на команду и тики идут отдельно и не связаны. Если мертвый флет, то вы можете "успеть" открыть/закрыть несколько ордеров на одном тике.
Здравствуйте. Я абсолютно не силен в программировании. Поэтому прошу помощи - помогите добавить в код закрытие позиций поStopLoss-у и TrailingStop-у . Советник не мой, но стратегия не плохая, поэтому методом проб и ошибок переделываю советника под себя - и уже честно говоря башню сносит, да еще и времени мало - работа. Кому интересно выкладываю советника полностью так сказать в оригинальной упаковке. А вот то, что я с ним творю :
//+------------------------------------------------------------------+//| stohastic_system.mq4 |//| Анатолий | |//+------------------------------------------------------------------+externdouble Lots=0.4;
externint TakeProfit=50;
externint NWave=2;
externint K=9;
externint D=3;
externint slowing=5;
externint Average_method=2;
externint price_field=0;
int K_level=0;
int down=0;
int up=0;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int ticket=0;
double stoch_1=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,1);
double stoch_2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
double stoch_3=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,3);
int Hour_curr=TimeHour(TimeCurrent());
if ((stoch_1>90)&&(stoch_2>70)) K_level=90;
if ((stoch_1<10)&&(stoch_2<30)) K_level=10;
if(OrdersTotal()<1)
{
if((Hour_curr>=1)&&(Hour_curr<24))//проверка сигналов только в этот промежуток времени
{
if((K_level==10)&&(stoch_1>10))//сигнал на покупку
{
RefreshRates();
Print("Сигнал на покупку. stoch_1=",stoch_1," stoch_2=",stoch_2);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,Ask+TakeProfit*Point,"buy_order1",1,0,Blue);
K_level=10;
down=0;
}
if((K_level==90)&&(stoch_1<90))//сигнал на продажу
{
RefreshRates();
Print("Сигнал на продажу. stoch_1=",stoch_1," stoch_2=",stoch_2);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,Ask-TakeProfit*Point,"sell_order1",1,0,Red);
K_level=90;
up=0;
}
}
}
return(0);
}
Потому что это локальные переменные, которые уже на втором тике хранят мусор вместо ticket
Огромное спасибо! Честно все время думал об этом!
См. прицеп. Размещаете его содержимое в папку Experts терминала. Выбираете таймфрейм интересующего Вас торгуемого инструмента, бросаете на его график сОва,
при этом задаете параметры для открытия ордера во внешних переменных эксперта:
Далее ждете образование нового бара на выбранном Вами таймфрейме инструмента...
При открытии ордера с рынка экспертом сравниваете время его открытия и время открытия нового бара.
Роман, как обещал рассказываю, что получается в реальности при работе с советником "открытие на открытии". Во первых советник срабатывает сразу на следующем тике после размещения на 1-часовом графике, а на открытии следующей свечи он открывает уже вторую сделку. Почему, я пока понять не могу. Во вторых цена открытия сделки все-таки не совпадает с ценой открытия новой свечи:
2012.02.24,12:00,1.3392,1.3405,1.3383,1.3387,768 - свеча открывается по 1,3392, а ордер срабатывает по 1.3390. В настройках я указываю проскальзывание в 1 пункт. Если указать 0 пунктов, то советник вообще не сработает, правильно я понимаю?
Лог я приложил. Для меня все таки остается важным что ордер на открытие совпадал с ценой открытия свечи.
Здравствуйте, господа. Буду признателен за пояснение.
Верно ли я понимаю, что если в коде последовательно записаны команды OrderDelete и OrderSend и если советник получает сигнал на исполнение обеих команд (снятие + установка) на тике №1, то:
- эти две команды не могут быть исполнены на одном и том же тике №1, а их исполнение растягивается минимум на 3 тика, причем
- на тике №1 подается команда OrderDelete;
- после подачи OrderDelete только со следующим тиком №2 возвращается результат, и только теперь на этом же тике №2 может быть подана команда OrderSend;
- результат команды OrderSend будет известен только на тике №3.
Так ли это?
И верно ли утверждение, что возможности на одном и том же тике отсылать две команды в МТ нет?
Советник пишу на МТ4.
Благодарю.
Здравствуйте, господа. Буду признателен за пояснение.
Верно ли я понимаю, что если в коде последовательно записаны команды OrderDelete и OrderSend и если советник получает сигнал на исполнение обеих команд (снятие + установка) на тике №1, то:
- эти две команды не могут быть исполнены на одном и том же тике №1, а их исполнение растягивается минимум на 3 тика, причем
- на тике №1 подается команда OrderDelete;
- после подачи OrderDelete только со следующим тиком №2 возвращается результат, и только теперь на этом же тике №2 может быть подана команда OrderSend;
- результат команды OrderSend будет известен только на тике №3.
Так ли это?
И верно ли утверждение, что возможности на одном и том же тике отсылать две команды в МТ нет?
Советник пишу на МТ4.
Благодарю.
тик - это новая котировка. И связи со временем выполнения команд OrderDelete и OrderSend нету
если идут новости, да + проскальзывания, то пока у вас простой OrderSend выполняется пройдет с десяток тиков. А если на рынке ночной флет, то за один тик обе команды пройти могут успеть
Также возможна коллизия, когда, например, у одного ордера срабатывает стоплосс, а другой вы пытаетесь открыть/закрыть советником на том же тике. Тогда сервер может в ряде случаев не дать исполнить операцию.
Т.е. ответ на ваши вопросы - нет, это не так))
тик - это новая котировка. И связи со временем выполнения команд OrderDelete и OrderSend нету
если идут новости, да + проскальзывания, то пока у вас простой OrderSend выполняется пройдет с десяток тиков. А если на рынке ночной флет, то за один тик обе команды пройти могут успеть
МТ, насколько я понимаю, тянет информацию с сервера потиково (а сервер, в свою очередь, дает ответы по командам одновременно с отсылкой новых тиков, это оптимизирует расходы по времени). И раньше, чем придет новый тик, ничего не известно. Я это имел ввиду. Но, может, я ошибаюсь в этом предположении? Вопрос связан скорее не с десятком тиков, а со вторым указанным Вами вариантом, когда тик медленный.
Верно ли я Вас понял, таким образом, что получение отклика по команде №1 не является обязательным условием, чтобы перейти к команде №2 и полностью ее обработать?
Отклик по команде - это "несущественная" часть команды? Его наличие не критично, чтобы перейти к следующей команде?
Ниже мы вступили в дискуссию с alsu, и, как мне кажется, я предполагал то же, что он: что наличие отклика критически важно. Вы же пишите, что на одном тике могут быть отработаны две команды. Выходит, информация с сервера приходит вообще без связи с потоком котировок?
Спасибо.
Все зависит от того, насколько быстро идут тики. Вообще функции, которые возвращают значение, OrderDelete, OrderSend и т.п. исполняются не асинхронно, т.е. до тех пор, пока не пройдет целиком вся операция и не будет выдан код ошибки (или NO_ERROR в случае успеха), следующий оператор выполняться не будет. Другое дело, что за это время могут пробежать несколько тиков, но они функцией start() обработаны не будут.
Также возможна коллизия, когда, например, у одного ордера срабатывает стоплосс, а другой вы пытаетесь открыть/закрыть советником на том же тике. Тогда сервер может в ряде случаев не дать исполнить операцию.
Т.е. ответ на ваши вопросы - нет, это не так))
Как это не так, если получается, что как раз "так", по Вашим же словам? )) Или я чего-то опять не понял? Вы пишете мне в ответ, что функции исполняются так, что следующий оператор исполняется только после отработки кода ошибки предыдущего. Я, мне кажется, это и предполагал: что "две команды не могут быть исполнены на одном и том же тике №1", потому что отклик - тот самый ответ или код ошибки - появляется самое раннее с новым тиком. Или нет? Или отклики по командам идут отдельным по времени потоком, не связанным с потоком котировок? Возможно, моя ошибка в том, что я предположил, что результаты исполнения команд возвращаются с новой котировкой?
Конечно, я имел ввиду в первую очередь ситуацию, когда тики медленные.
МТ, насколько я понимаю, тянет информацию с сервера потиково (а сервер, в свою очередь, дает ответы по командам одновременно с отсылкой новых тиков, это оптимизирует расходы по времени). И раньше, чем придет новый тик, ничего не известно. Я это имел ввиду. Но, может, я ошибаюсь в этом предположении? Вопрос связан скорее не с десятком тиков, а со вторым указанным Вами вариантом, когда тик медленный.
Верно ли я Вас понял, таким образом, что получение отклика по команде №1 не является обязательным условием, чтобы перейти к команде №2 и полностью ее обработать?
Отклик по команде - это "несущественная" часть команды? Его наличие не критично, чтобы перейти к следующей команде?
Ниже мы вступили в дискуссию с alsu, и, как мне кажется, я предполагал то же, что он: что наличие отклика критически важно. Вы же пишите, что на одном тике могут быть отработаны две команды. Выходит, информация с сервера приходит вообще без связи с потоком котировок?
Спасибо.
Здравствуйте. Я абсолютно не силен в программировании. Поэтому прошу помощи - помогите добавить в код закрытие позиций поStopLoss-у и TrailingStop-у . Советник не мой, но стратегия не плохая, поэтому методом проб и ошибок переделываю советника под себя - и уже честно говоря башню сносит, да еще и времени мало - работа. Кому интересно выкладываю советника полностью так сказать в оригинальной упаковке. А вот то, что я с ним творю :