сравнение балансов - страница 3

 
Jequile:

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

И далее цепочка if=> OrderModify


хитрО))) Сейчас к сожалению времени нет, но вечером я вернусь к Вашему коду, самому интересно. А пока просто добавьте в код

  void ModifyOrders()
  {


   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY) 
         {
            if ((Ask-OrderOpenPrice())>TrailingStop*Point*2 && (Ask-OrderOpenPrice())<TrailingStop*Point*3)
             {
             if(OrderStopLoss()<OrderOpenPrice()+TrailingStop*Point) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+TrailingStop*Point,OrderTakeProfit(),0,Blue);
             }
            if ((Ask-OrderOpenPrice())>TrailingStop*Point*3 && (Ask-OrderOpenPrice())<TrailingStop*Point*4)
             {
             if(OrderStopLoss()<OrderOpenPrice()+TrailingStop*Point*2) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+TrailingStop*Point*2,OrderTakeProfit(),0,Blue);
             }
         
 
Работает кстати) Удивительно простое решение. Я уже думал присвоениями заниматься. Спасибо.
 
Jequile:
Я уже думал присвоениями заниматься.
Это тогда надо в чиновники идти, а не в программисты)
 
Jequile:

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

И далее цепочка if=> OrderModify

Так, немного посидел...Заменил OrderOpenPrice() на OrderStopLoss() потому что OrderOpenPrice() - это константа.А если трейлинг-стоп, то стоплосс нужно менять.

Правда непонятно, что будет, если станет (Ask-OrderStopLoss())>TrailingStop*Point*4). Но это очень маловероятно..Наверное будет работать, хотя > TrailingStop*Point*3 условия Вы вряд ли дождётесь, т.к. сработает >TrailingStop*Point*2

 void ModifyOrders()
  {
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY) 
         {// Сначала более суровые условия
            if ((Ask-OrderStopLoss())>TrailingStop*Point*3 && (Ask-OrderStopLoss())<TrailingStop*Point*4)
             {
             OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+TrailingStop*Point*2,OrderTakeProfit(),0,Blue);
             }// может менее суровые сработают...
            else if ((Ask-OrderStopLoss())>TrailingStop*Point*2 && (Ask-OrderStopLoss())<TrailingStop*Point*3)
             {
             OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+TrailingStop*Point,OrderTakeProfit(),0,Blue);
             }
         

Рад если поможет)

 
Навскидку думается мне, что при трейлинге непосредственно стоп-лосса, а не цены открытия, придется множитель трелинг-стопа делать переменной. И что-то с этой переменной делать)
 
Jequile:
Навскидку думается мне, что при трейлинге непосредственно стоп-лосса, а не цены открытия, придется множитель трелинг-стопа делать переменной. И что-то с этой переменной делать)

Если Вы открыли ордер, всё, дождались, OrderOpenPrice() этого ордера ну никак не сможете изменить, Цену открытия можно трАллить только у отложенных ордеров!!!!
 
Это я понимаю, Sepulca, я про разницу OrderStopLoss()+TrailingStop*Point и OrderOpenPrice()+TrailingStop*Point. Мозги уже не варят. Потом как-нить отвечу.
 

Здравствуйте, всем!

Извиняюсь, что долго не отвечал. Занят был другим. Sepulca, я пока не буду заниматься трейлингом, так как он и так работает благодаря вам. Но если буду его модернизировать, то обязательно учту вашу версию.

Итак прошу совета. Предположим есть обычный советник по 2 мувингам. если 2 мувинг выше 1 то селл, если наоборот то бай.

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

 
Jequile:

Здравствуйте, всем!

Извиняюсь, что долго не отвечал. Занят был другим. Sepulca, я пока не буду заниматься трейлингом, так как он и так работает благодаря вам. Но если буду его модернизировать, то обязательно учту вашу версию.

Итак прошу совета. Предположим есть обычный советник по 2 мувингам. если 2 мувинг выше 1 то селл, если наоборот то бай.

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

Не, не флаги. Хотя и их можно, но не надёжно (перезапуск советника - флаг потерялся). Вам нужно определять факт пересечения. Допустим, вы используете МАшки по ценам Close. Тогда пересечения ищете на 1-м и 2-м барах. Если МАшки у вас по цене Open, то можно проверять пересечение на 0-м и 1-м барах.

Что нужно: Если МАшка1 больше МАшки2 на первом баре и МАшка 1 меньше или равна МАшке2 на втором баре, то имеем пересечение вверх. Зеркально для определения пересечения вниз.

Т.е.:

   if (ma1(bar1)>ma2(bar1) && ma1(bar2)<=ma2(bar2)) {
      // Пересечение вверх
      }
 
понял спасибо. снова просто решение)
Причина обращения: