Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

  • Ответов 2,5k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано
23 часа назад, Rigal сказал:

Я не понимаю, что вы считаете в табличке выше - возможно, в этом есть какое-то зерно, но его нужно прорастить. 

Сдается мне, вы говорите о том, сколько умножений выдержит депозит.

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

Если я неправильно вас понял - вы меня поправьте, пожалуйста? 

Процент риска в целом не имеет значения, можно рассматривать систему с постоянным лотом и множить лот.

У вас максимальное число непрерывных проигрышей выше числа непрерывных выигрышей.

Более того, средний непрерывный выигрыш один, а средний непрерывный проигрыш - 3.

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

Ну и у вас статистика из 67 сделок и не видно, какой интервал протестирован - даже этот малоинтересный результат вполне может быть результатом cherry picking.

Давайте вы, если хотите, чтобы кто-то сел и поработал, вы как-то сядьте и поработайте сперва, чтобы убедиться хотя бы для себя, что эта работа имеет смысл?

 . . . какой интервал протестирован - H1

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
23 часа назад, Rigal сказал:

Что важнее: процент проигрышных и выигрышных сделок - в районе трети.

То есть система может быть прибыльна только за счет высокого RR.

Такие системы имеют отрицательное матожидание с мартингейлом.

"То есть система может быть прибыльна только за счет высокого RR." В советнике это реализовано, ТП вообще может быть отсутствовать в расчете на рост безграничной прибыли, но как видно из теста, что не всегда это работает. Ну а по поводу увеличения риска после получения SL можно воздух сотресать до бесконечности пока не сделаем тест. И я считаю, что процент проигрышных и выигрышных сделок - в районе трети за период 16 месяцев на ТФ Н1 совсем не плох. 

Если я сделаю тест (ТФ Н1, ТП=1.62*SL) в ручном режиме на симуляторе за шесть месяцев Вас такой объём работы устроит?

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
1 час назад, drobayura сказал:

"То есть система может быть прибыльна только за счет высокого RR." В советнике это реализовано, ТП вообще может быть отсутствовать в расчете на рост безграничной прибыли, но как видно из теста, что не всегда это работает. Ну а по поводу увеличения риска после получения SL можно воздух сотресать до бесконечности пока не сделаем тест. И я считаю, что процент проигрышных и выигрышных сделок - в районе трети за период 16 месяцев на ТФ Н1 совсем не плох. 

Если я сделаю тест (ТФ Н1, ТП=1.62*SL) в ручном режиме на симуляторе за шесть месяцев Вас такой объём работы устроит?

Вот результаты теста в ручном режиме на симуляторе с 03.10.22 по сегодняшний день (ТФ Н1, ТП=1.62*SL без трала с начальным депозитом 1000)

 

111F.jpg

222F.jpg

333F.jpg

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

да не надо делать тестов в ручном режиме за 6 месяцев.

Вообще делать тесты за 6 месяцев не надо. 

Меньше, чем за пятилетку - вы занимаетесь cherry picking. На русском это называется подгонка фактов под теорию.

2 часа назад, drobayura сказал:

Ну а по поводу увеличения риска после получения SL можно воздух сотресать до бесконечности пока не сделаем тест

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

Есть такая наука матстатистика.

Она позволяет оценить вероятности событий, исходя из количества этих событий, на статистически значимой выборке.

У вас выше во всех тестах

а) выборка статистически не значимая

б) если проигнорировать пункт а) и довериться вашим данным - они говорят, что вероятность потери вдвое выше вероятности выигрыша

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

При этом вы упорно не делаете более длительного теста и не показали ни сета, ни отчета тестера.

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

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

 

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

А я перечитал историю нашего с вами, @drobayura, общения.

Вопрос закрыт, спасибо за неоценимый вклад, не болейте.

  • Огонь! 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
7 часов назад, Rigal сказал:

А я перечитал историю нашего с вами, @drobayura, общения.

Вопрос закрыт, спасибо за неоценимый вклад, не болейте.

Чем же я Вас обидел, вроде всегда общался с Вами корректно. Прошу прощения, если ,что не так. Мне очень жаль.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

cm ea manual grid.mq4Здравствуйте уважаемые программисты! Могли бы вы изменить немного этот помощник для торговли . Когда я закрываю сеть открытых ордеров, старые отложки не удаляются, а продолжают в том же порядке открываться. для обнуления я отключаю функцию открытия отложек, они удаляются, снова включаю чтобы строилась новая сетка. Можете это сделать на автомате, чтобы при закрытии ордеров отложенные старые ордера удалялись и строилась новая сетка. Что-то похожее есть в пирамидинге, но там нет панели управления и много мне ненужного, а мне нужно просто открывать отложки в нужном направлении

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

int   TrailingStopOrders  = 20;        // Фиксированный размер трала StopOrders
int   TrailingStepStop    = 3;         // Шаг трала StopOrders
int   TrailingLimitOrders = 30;        // Фиксированный размер трала LimitOrders
int   TrailingStepLimit   = 3;         // Шаг трала LimitOrders
color clModifyBuyOrder  = clrNONE;     // Цвет значка модификации покупки
color clModifySellOrder = clrNONE;     // Цвет значка модификации продажи
//===============================================================================================
//------------------------- Сопровождение Stop ордеров простым тралом --------------------------+
//===============================================================================================
void TrailingStopOrder(stringsymb="0",int type=-1,int mg=-1) {
double di=0, pa=0, pb=0, p=0, sl=0, tp=0;
if(symb=="0") { symb=Symbol();}
  p=MarketInfo(symb,MODE_POINT);
  int msl=(int)MarketInfo(symb, MODE_STOPLEVEL);
  if(TrailingStopOrders<msl) {
   Alert("TrailingStopOrder(): Значение меньше допустимого=",TrailingStopOrders/Sign,", Минимум=",msl/Sign);
   TrailingStopOrders=msl;} else{TrailingStopOrders=TrailingStopOrders;}
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
     if(OrderType()==OP_BUYSTOP) {
      pa=MarketInfo(symb,MODE_ASK);
      if(OrderOpenPrice()-pa>(TrailingStopOrders+TrailingStepStop-1)*p) { 
       di=OrderOpenPrice()-pa-(TrailingStopOrders*p);
       if(OrderStopLoss()>0) sl=OrderStopLoss()-di; else sl=0;
       if(OrderTakeProfit()>0) tp=OrderTakeProfit()-di; else tp=0;
         ModifyOrder(symb,pa+(TrailingStopOrders*p), sl, tp, clModifyBuyOrder);
     }}
     if(OrderType()==OP_SELLSTOP) {
      pb=MarketInfo(symb,MODE_BID);
      if(pb-OrderOpenPrice()>(TrailingStopOrders+TrailingStepStop-1)*p) {
       di=pb-OrderOpenPrice()-(TrailingStopOrders*p);
       if(OrderStopLoss()>0) sl=OrderStopLoss()+di; else sl=0;
       if(OrderTakeProfit()>0) tp=OrderTakeProfit()+di; else tp=0;
         ModifyOrder(symb,pb-(TrailingStopOrders*p), sl, tp, clModifySellOrder);
     }}
}}}}
//===============================================================================================
//------------------------- Сопровождение Limit ордеров простым тралом -------------------------+
//===============================================================================================
void TrailingLimitOrder(stringsymb="0",int type=-1,int mg=-1) {
double di=0, pa=0, pb=0, p=0, sl=0, tp=0;
if(symb=="0") { symb=Symbol();}
  p=MarketInfo(symb,MODE_POINT);
  int msl=(int)MarketInfo(symb, MODE_STOPLEVEL);
  if(TrailingLimitOrders<msl) {
   Alert("TrailingLimitOrder(): Значение меньше допустимого=",TrailingLimitOrders/Sign,", Минимум=",msl/Sign);
   TrailingLimitOrders=msl; } else { TrailingLimitOrders=TrailingLimitOrders; }
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
     if(OrderType()==OP_BUYLIMIT) {
      pa=MarketInfo(symb,MODE_ASK);
      if(pa-OrderOpenPrice()>(TrailingLimitOrders+TrailingStepLimit-1)*p) {
       di=pa-OrderOpenPrice()-(TrailingLimitOrders*p);
       if(OrderStopLoss()>0) sl=OrderStopLoss()+di; else sl=0;
       if(OrderTakeProfit()>0) tp=OrderTakeProfit()+di; else tp=0;
         ModifyOrder(symb,pa-(TrailingLimitOrders*p), sl, tp, clModifyBuyOrder);
     }}
     if(OrderType()==OP_SELLLIMIT) {
      pb=MarketInfo(symb,MODE_BID);
      if(OrderOpenPrice()-pb>(TrailingLimitOrders+TrailingStepLimit-1)*p) {
       di=OrderOpenPrice()-pb-(TrailingLimitOrders*p);
       if(OrderStopLoss()>0) sl=OrderStopLoss()-di; else sl=0;
       if(OrderTakeProfit()>0) tp=OrderTakeProfit()-di; else tp=0;
         ModifyOrder(symb,pb+(TrailingLimitOrders*p), sl, tp, clModifySellOrder);
     }}
}}}}
еще нашёл такой код для трала отложек

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

cmea manual gird.mq4 Добавил трал к лимиту но в тестере через определенное время останавливается тест

Изменено пользователем Lexa000
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
4 часа назад, Lexa000 сказал:

cmea manual gird.mq4 Добавил трал к лимиту но в тестере через определенное время останавливается тест

Оказалось два трала конфликтуют 

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

cmea manual gird.mq4еще немного подредактировал

   ButtonCreate(0,"cm off",0,225,y,210,20,Text(LANGUAGE,"Отключение после взятия профита","Shutdown after taking profit"),"Arial",8,clrBlack,clrLightGray,clrLightGray,clrNONE);
В кнопках вообще не разбираюсь, просто удалил функцию

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Добрый день,программисты! Подскажите,пожалуйста,почему советник открывает покупки с шагом,а продажи разом,без шага? Спасибо

Мартин-3.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 07.05.2023 в 18:31, Lexa000 сказал:

cmea manual gird.mq4еще немного подредактировал

   ButtonCreate(0,"cm off",0,225,y,210,20,Text(LANGUAGE,"Отключение после взятия профита","Shutdown after taking profit"),"Arial",8,clrBlack,clrLightGray,clrLightGray,clrNONE);
В кнопках вообще не разбираюсь, просто удалил функцию

Здравствуйте уважаемые программисты! Кто может помочь подправить советник, чтобы он тралил сеть ордеров не нарушая дистанцию между ордерами? 

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 09.05.2023 в 18:25, Lexa000 сказал:

Здравствуйте уважаемые программисты! Кто может помочь подправить советник, чтобы он тралил сеть ордеров не нарушая дистанцию между ордерами? 

Я не совсем понимаю задачу в такой формулировке.

Каким образом трал нарушает дистанцию между ордерами?

Если он тралит все ордера разом - он и закроет их все разом.

Если он тралит каждый ордер отдельно - он закроет только те, что тралит. На дистанцию это как бы не должно влиять?

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
1 час назад, Rigal сказал:

Я не совсем понимаю задачу в такой формулировке.

Каким образом трал нарушает дистанцию между ордерами?

Если он тралит все ордера разом - он и закроет их все разом.

Если он тралит каждый ордер отдельно - он закроет только те, что тралит. На дистанцию это как бы не должно влиять?

Уважаемый Rigal, я говорил об отложенных ордерах, когда-то LUKA написал советник в 2013 тянулка 1+1 такой советник, который тянет два лимитных ордера на определенной дистанции. Я его проверить не могу, потому что он уже не торгует. Мне будет достаточно трала даже двух лимитных ордеров. Или другой вариант, если открывать лимитные ордера по одному, чтобы они также увеличивались плюс один как открываются по два, как то так

e-$_Тянулка_1+1.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
13 минут назад, Lexa000 сказал:

Уважаемый Rigal, я говорил об отложенных ордерах, когда-то LUKA написал советник в 2013 тянулка 1+1 такой советник, который тянет два лимитных ордера на определенной дистанции. Я его проверить не могу, потому что он уже не торгует. Мне будет достаточно трала даже двух лимитных ордеров. Или другой вариант, если открывать лимитные ордера по одному, чтобы они также увеличивались плюс один как открываются по два, как то так

e-$_Тянулка_1+1.mq4 18.53 \u043a\u0411 · 0 загрузок

Мне из вашего объяснения по-прежнему непонятно, что вы хотите.

У вас, вероятно, есть контекст - вы знаете, что написал Luka и как оно должно бы работать.

Я - нет. И было бы здорово, если бы мне не нужно было поднимать весь этот контекст.

Опишите, пожалуйста, желаемое поведение, подробно. 

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

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
54 минуты назад, Rigal сказал:

Мне из вашего объяснения по-прежнему непонятно, что вы хотите.

У вас, вероятно, есть контекст - вы знаете, что написал Luka и как оно должно бы работать.

Я - нет. И было бы здорово, если бы мне не нужно было поднимать весь этот контекст.

Опишите, пожалуйста, желаемое поведение, подробно. 

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

Спасибо что вы обратили внимание на мое сообщение! Иногда приходится выставлять отложенные ордера: OP_BUYSTOP, OP_BUYLIMIT, OP_SELLSTOP, OP_SELLLIMIT. Я больше по лимитным ордерам. Я ищу способ открытия лимитных ордеров по нарастающей, можно по одному, по два и более. Но когда цена уходит от лимитного ордера, нужно его переместить ближе к цене. Но, если я открою несколько лимитных ордеров и воспользуюсь тралом, который я добавил в советник, то он переместит все лимитные ордера на одну цену, а мне нужно чтобы они все перемещались вместе друг от руга примерно в пределах 10 пунктов.E8B33B47-6683-436D-9A17-DC1ADF260729.thumb.png.187dadbaa295f2f56061bbd9fbb6d1ed.png

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 09.05.2023 в 06:54, Viktor2005 сказал:

Добрый день,программисты! Подскажите,пожалуйста,почему советник открывает покупки с шагом,а продажи разом,без шага? Спасибо

Мартин-3.mq4 20.89 \u043a\u0411 · 1 загрузка

Мы обсудили в личке, но чтобы не тратить чье-то еще время:

image.png.3cffdcc20d4fca671f7b8feeb0bc4180.png

Должно быть больше, или равно.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 10.05.2023 в 23:14, Lexa000 сказал:

Спасибо что вы обратили внимание на мое сообщение! Иногда приходится выставлять отложенные ордера: OP_BUYSTOP, OP_BUYLIMIT, OP_SELLSTOP, OP_SELLLIMIT. Я больше по лимитным ордерам. Я ищу способ открытия лимитных ордеров по нарастающей, можно по одному, по два и более. Но когда цена уходит от лимитного ордера, нужно его переместить ближе к цене. Но, если я открою несколько лимитных ордеров и воспользуюсь тралом, который я добавил в советник, то он переместит все лимитные ордера на одну цену, а мне нужно чтобы они все перемещались вместе друг от руга примерно в пределах 10 пунктов.E8B33B47-6683-436D-9A17-DC1ADF260729.thumb.png.187dadbaa295f2f56061bbd9fbb6d1ed.png

Добрался до компа.

Глядя на скрин: а вас не смущает, что ваши стопы растут по мере движения цены?

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

 

Замечания по коду:

1. OnTimer вам, вероятно, не нужен. Протестировать его в МТ4 нельзя нормально, а работать в перерывах между тиками вам не надо - код не мультивалютный. Ну и сам таймер не инициализируется в любом случае

2. У вас в советнике два трала. Один - по профиту, другой - лимиток. Причем трал лимиток написан в рассчете на одну лимитку.

 

Позвольте полюбопытствовать: а зачем вам много лимиток сразу? Это ж просто лишние хлопоты: таскать их по графику, ухаживать за ними всячески, пересчитывать?

Не проще ли держать открытой одну лимитку на заданной дистанции от рыночного ордера, или цены?

И как только она становится рыночным ордером - это повод открыть новую лимитку? По той же логике: на заданном расстоянии от текущей цены.

 

UPD:

Я реализовал отдельный метод TrailLimitGrid и вызвал его в OnTick для OP_BUYLIMIT и OP_SELLLIMIT, а вызов оригинального второго трала заглушил.

Этот метод должен делать ровно то, что вы описали: тралить всю сетку по тому же принципу, по которому тралился бы один ордер.

Глянул в тестере - тралит.

Но после активации ордеров он у вас плодит новые сетки, судя по всему - с этим вы уже сами разбирайтесь, возможно, так задумано?

 

cmea manual gird.mq4

Изменено пользователем Rigal
  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
7 часов назад, Rigal сказал:

Добрался до компа.

Глядя на скрин: а вас не смущает, что ваши стопы растут по мере движения цены?

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

 

Замечания по коду:

1. OnTimer вам, вероятно, не нужен. Протестировать его в МТ4 нельзя нормально, а работать в перерывах между тиками вам не надо - код не мультивалютный. Ну и сам таймер не инициализируется в любом случае

2. У вас в советнике два трала. Один - по профиту, другой - лимиток. Причем трал лимиток написан в рассчете на одну лимитку.

 

Позвольте полюбопытствовать: а зачем вам много лимиток сразу? Это ж просто лишние хлопоты: таскать их по графику, ухаживать за ними всячески, пересчитывать?

Не проще ли держать открытой одну лимитку на заданной дистанции от рыночного ордера, или цены?

И как только она становится рыночным ордером - это повод открыть новую лимитку? По той же логике: на заданном расстоянии от текущей цены.

 

UPD:

Я реализовал отдельный метод TrailLimitGrid и вызвал его в OnTick для OP_BUYLIMIT и OP_SELLLIMIT, а вызов оригинального второго трала заглушил.

Этот метод должен делать ровно то, что вы описали: тралить всю сетку по тому же принципу, по которому тралился бы один ордер.

Глянул в тестере - тралит.

Но после активации ордеров он у вас плодит новые сетки, судя по всему - с этим вы уже сами разбирайтесь, возможно, так задумано?

 

cmea manual gird.mq4 97.69 \u043a\u0411 · 1 загрузка

Спасибо большое! 

У меня эта стратегия заключается как вмешательство в торговлю если что-то идет не по плану. А скрин я взял в интернете, так как сложно описать все словами. Там для того чтобы сетка начиналась сначала, нужно сначала отключить функцию, потом снова включит. Мне достаточно того что вы сделали

image.png.408196010bc76edbacbb6f4a7b2b8793.png

Ещё раз спасибо, отложки тралит на определенном расстоянии как я хотел.

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

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
1 час назад, Lexa000 сказал:

Спасибо большое! 

У меня эта стратегия заключается как вмешательство в торговлю если что-то идет не по плану. А скрин я взял в интернете, так как сложно описать все словами. Там для того чтобы сетка начиналась сначала, нужно сначала отключить функцию, потом снова включит. Мне достаточно того что вы сделали

image.png.408196010bc76edbacbb6f4a7b2b8793.png

Ещё раз спасибо, отложки тралит на определенном расстоянии как я хотел.

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

Я тут подредактировал код чтобы лимитки начинали сначала

вот это OT=OrderType();
                  if(OT==OP_BUY) b++;
                  if(OT==OP_SELL) s++; заменил на

 OT=OrderType();
                  if(tip==OP_BUY && (OT==OP_BUYLIMIT || OT==OP_BUYSTOP)) error=OrderDelete(Ticket=0);
                   if(tip==OP_SELL && (OT==OP_SELLLIMIT || OT==OP_SELLSTOP)) error=OrderDelete(Ticket=0); это.

И сетка не растет, как было до этого. 

Это в блоке bool CloseByOrders()

Теперь такой результат

image.png.a94903bfca178dc75cc3735a2d2a4487.png

Изменено пользователем Lexa000
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
4 часа назад, Lexa000 сказал:

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

Я там комментировал в коде.

Кроме кода почитать нечего - это оригинальный код.

Вот он весь:

Спойлер
/* трал сетки лимиток */

void TrailLimitGrid(int _type) {
   int sign = (_type == OP_BUYLIMIT ? 1 : -1);
   double currentPrice = (_type == OP_BUYLIMIT ? Ask : Bid);
   double bestPrice = (_type == OP_BUYLIMIT ? 0 : DBL_MAX);
   int count = 0;
   //сперва ищем наилучший ордер этого типа
   for(int i = OrdersTotal(); i >= 0; i--) {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
      && OrderSymbol() == Symbol()
      && (Magic == -1 || OrderMagicNumber() == Magic)
      && OrderType() == _type) {
         count++;
         if(sign * (OrderOpenPrice() - bestPrice) > 0)
            bestPrice = OrderOpenPrice();
      }
   }
   //на этом этапе мы знаем цену лимитки, которую нужно таскать за ценой. Остальные сдвигать на ту же величину
   if(count > 0) { //если у нас вообще нашлись лимитки
      double distance = sign * (currentPrice - bestPrice);
      if(distance > (TrailingStop + TrailingStep - 1) * Point()) {
         //да, дистанция от текущей цены до наилучшего ордера уже больше, чем трал + шаг, надо двигать
         double targetPrice = currentPrice - sign * TrailingStop * Point();
         double delta = targetPrice - bestPrice;
         //повторяем цикл, модифицируем все ордера этого типа
         for(int i = OrdersTotal(); i >= 0; i--) {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
            && OrderSymbol() == Symbol()
            && (Magic == -1 || OrderMagicNumber() == Magic)
            && OrderType() == _type) {
               double newPrice = NormalizeDouble(OrderOpenPrice() + delta, Digits);
               double newSL = (OrderStopLoss() > DBL_EPSILON ? NormalizeDouble(OrderStopLoss() + delta, Digits) : 0.0);
               double newTP = (OrderTakeProfit() > DBL_EPSILON ? NormalizeDouble(OrderTakeProfit() + delta, Digits) : 0.0);
               OrderModify(OrderTicket(), newPrice, newSL, newTP, OrderExpiration(), (_type == OP_BUYLIMIT ? clrBlue : clrRed));
            }
         }         
      }
   }
}
/* трал сетки лимиток */

 

 

Изменено пользователем Rigal
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • ×
    ×
    • Создать...