0
Нарисуйте на картинке всю последовательность шагов. Я на своем рисунке нарисовал так как у вас в ТЗ. Если вы торгуете иначе, изобразите все это примерно так как я это сделал или покажите все ваши сделки на графике, может быть так будет понятнее.
avatar

AM2

  • 14 июля 2016, 07:29
0
На картинках нагляднее, быстрее понять суть можно будет. Пока вникаю.

avatar

AM2

  • 13 июля 2016, 22:29
0
Гоняйте и пишите что еще добавить, какой нибудь простенький пунктик.
avatar

AM2

  • 13 июля 2016, 21:41
0
Гонял на всех участках, за сотню сделок всегда профит.
avatar

AM2

  • 13 июля 2016, 21:30
0
Ааааа уже интересная штука получилась!




//+------------------------------------------------------------------+
//|                                                        Hedge.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2."
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lot          = 0.1;      // Trade volume
extern double KLot         = 2;        // Lot increase
extern int StopLoss        = 0;        // Order sroploss
extern int TakeProfit      = 0;        // Order takeprofit
extern int TrailingStop    = 100;      // Trailing stop
extern int TrailingStep    = 20;       // Trailing step
extern int BuySell         = 0;        // 0-OFF. 1-Buy. 2-Sell.
extern int BULevel         = 0;        // Zero Level
extern int BUPoint         = 30;       // Zero Points
extern int Delta           = 100;      // Distance from the price
extern int Slip            = 3;        // Slippage
extern int Magic           = 123;      // Magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket,ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               type=OrderType();
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>TrailingStop*Point)
              {
               if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point)
                 {
                  mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }

         if(OrderType()==OP_SELL)
           {
            if((OrderOpenPrice()-Ask)>TrailingStop*Point)
              {
               if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0)
                 {
                  mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lots()
  {
   double lot=Lot;
   if(CountTrades()>0)
     {
      for(int i=OrdersTotal()-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
              {
               lot=OrderLots()*KLot;
              }
           }
        }
     }
   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();

// первая поза

   if(BuySell==1)
     {
      if(CountTrades()<1) PutOrder(0,Ask);
     }

   if(BuySell==2)
     {
      if(CountTrades()<1) PutOrder(1,Bid);
     }

// 2-я поза

   if((FindLastBuyPrice()-Ask)/Point>=Delta && FindOrderType()==0)
     {
      if(CountTrades()==1) PutOrder(1,Bid);
     }

   if((Bid-FindLastSellPrice())/Point>=Delta && FindOrderType()==1)
     {
      if(CountTrades()==1) PutOrder(0,Ask);
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 13 июля 2016, 21:19
+1
Это задание было как развязать гордиев узел :) 
Человек вводит шифт отрицательный но все равно должно работать, тут только MathAbs() поможет :D 
avatar

AM2

  • 13 июля 2016, 19:12
0
Когда разные ордера и стоп не туда попадет ошибка будет, здесь или большие стопы ставить или учитывать цену открытия.
avatar

AM2

  • 13 июля 2016, 19:03
0
Мне здесь оплачивается небольшой объем работы, затрачивать много времени и сил мне неинтересно.
Могу сделать примерно такой простой вариант. Работа с одним ордером плюс лок к нему, и трал бу.
avatar

AM2

  • 13 июля 2016, 18:59
0
Объем большой, могу сделать только небольшую часть.
avatar

AM2

  • 13 июля 2016, 18:37
0
Это топик автора, он здесь хозяин :) 
avatar

AM2

  • 13 июля 2016, 16:41
0
Cмоделировал в тестере. Выставил ордера с разными стопами, затем все модифицировались по последнему. Пока сырой набросок.






//+------------------------------------------------------------------+
//|                                                       Change.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2."
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

extern int StopLoss    = 0;    // Order sroploss
extern int TakeProfit  = 0;    // Order takeprofit
extern int Magic       = 123;  // Magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0,err=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)   sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,0.1,NormalizeDouble(price,Digits),3,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastSL()
  {
   double sl=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) sl=OrderStopLoss();
     }
   return(sl);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastTP()
  {
   double tp=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) tp=OrderTakeProfit();
     }
   return(tp);
  }
//+------------------------------------------------------------------+
//|  Модификация стопов                                              |
//+------------------------------------------------------------------+
void StopMode(double sl,double tp)
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(OrderStopLoss()!=sl && OrderTakeProfit()!=tp)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
               return;
              }
           }

         if(OrderType()==OP_SELL)
           {
            if(OrderStopLoss()!=sl && OrderTakeProfit()!=tp)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
               return;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1)
     {
      for(int i=1;i<=2;i++)
        {
         PutOrder(2,Bid-222*Point*i);
         PutOrder(5,Bid-666*Point);
        }
     }

   StopMode(LastSL(),LastTP());

   Comment("\n SL: ",LastSL(),
           "\n TP: ",LastTP());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 13 июля 2016, 15:50
0
Скиньте код которым открываете ордера я прогоню в тестере, наглядно нужно чтобы было все, так не понятно. Не зря картинку просил или скрин дайте с терминала с ордерами?
avatar

AM2

  • 13 июля 2016, 15:07
0
3 штуки подряд! Что это было? :D 
Схемку нарисуйте как располагаются ордера чтобы можно было смоделировать в тестере и попробую сейчас сообразить.
avatar

AM2

  • 13 июля 2016, 13:59
0
Есть ведь советники по пересечению МА в базе, зачем еще одинаковые?
avatar

AM2

  • 13 июля 2016, 12:11
0
Открывает неплохо, но тупо держит ордера.
Индикатор 10 поменялся, а он не закрывает или не переворачивается.

В ТЗ нет переворотов и обратного закрытия, а автор топика не просил добавить ни то ни другое.
avatar

AM2

  • 13 июля 2016, 12:08
0
риск к профиту от 1 к 3.

1 к 3 было уже, еще подержишь?
avatar

AM2

  • 12 июля 2016, 21:59
0
Здесь закрылись селы по профиту, остался ордер бай.

В советнике такая логика что пара бай и селл ставятся только когда нет поз, а в последних двух случаях висит бай.
avatar

AM2

  • 11 июля 2016, 22:01
0
Все сигналы отработаны. Просьбы делать скрины крупнее точек 1200х500.

avatar

AM2

  • 11 июля 2016, 13:32
0
Иногда заходит в поизцию и не переворачивается, хотя по инди катору должен быть переворот.

Какой переворот? Где он прописан в ТЗ?
avatar

AM2

  • 11 июля 2016, 13:22