+1
Посмотрю. Если разберусь с чужим кодом, сделаю.
avatar

AM2

  • 3 ноября 2015, 18:05
0
Добавил отключение доливок: www.opentraders.ru/downloads/916/


extern int Dolivka = 1; // 1-есть доливки 0-нет
avatar

AM2

  • 3 ноября 2015, 17:43
0
Есть готовый вариант: www.opentraders.ru/downloads/918/
Трейлинг может осуществляться по фракталам, по экстремумам прошлых баров или по указанному количеству пунктов. Может запускаться как отдельный советник или скрипт, совместно с любым советником.
avatar

AM2

  • 3 ноября 2015, 17:34
0
Можете проверить и в тестере в замедленном режиме с остановкой.
Меняйте сдвиг в настройках:

extern int IndPeriod    = 12;       // период Fisher
extern int IndShift     = 3;        // сдвиг Fisher
avatar

AM2

  • 3 ноября 2015, 17:27
0
прикладываю подобный скрипт(не эксперт) но там нет этой функции

Вы лучше приложите мне советник, где есть эта функция :D 
А зачем мне скрипт, где ее нет?
avatar

AM2

  • 3 ноября 2015, 17:12
+1
Добавил магик: www.opentraders.ru/downloads/917/
avatar

AM2

  • 3 ноября 2015, 17:08
+1
Сейчас гляну.
avatar

AM2

  • 3 ноября 2015, 16:55
0
а вы скрипты не пишите?

Нужно смотреть ТЗ.
avatar

AM2

  • 3 ноября 2015, 16:51
0
1-открыл ордер на Bay и Sell хотя сигнала небыло


Условие на покупку стоит: столбик зеленый и указанное количество баров назад был красный.

На втором рисунке он вообще начал открывать и закрывать ордера как хочет


Индикатор перерисовывается и понять правильно или нет можно только в режиме реального времени.
avatar

AM2

  • 3 ноября 2015, 16:48
0
Добавил стопы на все ордера, закрытие по профиту с включением отключением запрета торговли на сегодня: www.opentraders.ru/downloads/916/
avatar

AM2

  • 3 ноября 2015, 12:42
0
можно так сделать чтобы на каждую сделку был тейк… стоп трал? а не на все сделки вместе 1 трал?


Вы хотя бы смотрели работу советника в тестере? Если бы смотрели, не задавали бы таких вопросов *think* 
avatar

AM2

  • 3 ноября 2015, 12:17
0
Трал есть, а остановка по профиту усложняет и без того непростой советник.
avatar

AM2

  • 3 ноября 2015, 12:02
0
Из индикатора point zero не удается вытащить никаких значений.
avatar

AM2

  • 3 ноября 2015, 11:56
0
Вы в базе смотрели, там наверное с десяток советников на пробой дня? Ничего не подобрали подходящего?
avatar

AM2

  • 3 ноября 2015, 11:35
0
Вы смотрите на этом этапе и пишите что добавить или поправить.
avatar

AM2

  • 3 ноября 2015, 11:32
+2
Набросок с доливками:



//+------------------------------------------------------------------+
//|                                                     Delta2MA.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

extern int Magic        = 20150914;
extern int StopLoss     = 1200;
extern int TakeProfit   = 1400;
extern int Delta        = 400;
extern int PipStep      = 100;
extern int TrailingStop = 0;
extern int Slip         = 50;
extern int MA1Period    = 9;
extern int MA2Period    = 22;
extern double Lots      = 0.1;

int CrossUP=0,CrossDN=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(TrailingStop>0)
                 {
                  if(Bid-OrderOpenPrice()>TrailingStop*Point)
                    {
                     if(OrderStopLoss()<Bid-TrailingStop*Point)
                       {
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                        return;
                       }
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(TrailingStop>0)
                 {
                  if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                    {
                     if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                       {
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                        return;
                       }
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
   double sl=0,tp=0;
//---- get Indicatorrs 
   double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
   double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
   double delta=MathAbs((ma11-ma21)/Point);

//---- buy 
   if(CrossUP>0 && delta>Delta)
     {
      if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
      return;
     }
//---- sell   
   if(CrossDN>0 && delta>Delta)
     {
      if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
      return;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
            if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
            return;
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               if(CrossDN>0)
                 {
                  CloseAll();                  
                 }
              }
            if(OrderType()==OP_SELL)
              {
               if(CrossUP>0)
                 {
                  CloseAll();                  
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   int ticket=0;
   double price=0;
//---- get Indicatorrs 
   double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
   double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
   double ma12=iMA(NULL,0,MA1Period,0,0,0,2);
   double ma22=iMA(NULL,0,MA2Period,0,0,0,2);
   double delta=MathAbs((ma11-ma21)/Point);

   if(ma11>ma21 && ma12<ma22 && CrossUP<1) {CrossUP++; CrossDN=0;}
   if(ma11<ma21 && ma12>ma22 && CrossDN<1) {CrossDN++; CrossUP=0;}

   if(CountTrades()<1) OpenPos();
   else ClosePos();

   if(CountTrades()>0)
     {
      int otype=FindOrderType();

      if(otype==OP_BUY)
        {
         price=FindLastBuyPrice();
         if((Ask-price)/Point>=PipStep)
           {
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,"Buy Order",Magic,0,Blue);
           }
        }

      else if(otype==OP_SELL)
        {
         price=FindLastSellPrice();
         if((price-Bid)/Point>=PipStep)
           {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Ask,Slip,0,0,"Sell Order",Magic,0,Red);
           }
        }
     }

   if(TrailingStop!=0) Trailing();
   Comment("\n CrossUP: ",CrossUP,
           "\n CrossDN: ",CrossDN,
           "\n Delta: ",delta);
//----
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 3 ноября 2015, 01:19
+1
Сделал вариант без доливок:


//+------------------------------------------------------------------+
//|                                                     Delta2MA.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

extern int Magic        = 20150914;
extern int StopLoss     = 1200;
extern int TakeProfit   = 1400;
extern int Delta        = 400;
extern int TrailingStop = 0;
extern int Slip         = 50;
extern int MA1Period    = 9;
extern int MA2Period    = 22;
extern double Lots      = 0.1;

int CrossUP=0,CrossDN=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(TrailingStop>0)
                 {
                  if(Bid-OrderOpenPrice()>TrailingStop*Point)
                    {
                     if(OrderStopLoss()<Bid-TrailingStop*Point)
                       {
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                        return;
                       }
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(TrailingStop>0)
                 {
                  if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                    {
                     if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                       {
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                        return;
                       }
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
   double sl=0,tp=0;
//---- get Indicatorrs 
   double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
   double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
   double delta = MathAbs((ma11-ma21)/Point);

//---- buy 
   if(CrossUP>0 && delta>Delta)
     {
      if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
      return;
     }
//---- sell   
   if(CrossDN>0 && delta>Delta)
     {
      if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
      return;
     }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               if(CrossDN>0)
                 {
                  bool c=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
                  return;
                 }
              }
            if(OrderType()==OP_SELL)
              {
               if(CrossUP>0)
                 {
                  c=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White);
                  return;
                 }
              }
           }
        }
     }
  }  
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
//---- get Indicatorrs 
   double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
   double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
   double ma12=iMA(NULL,0,MA1Period,0,0,0,2);
   double ma22=iMA(NULL,0,MA2Period,0,0,0,2);
   double delta = MathAbs((ma11-ma21)/Point);
   
   if(ma11>ma21 && ma12<ma22 && CrossUP<1) {CrossUP++; CrossDN=0;}
   if(ma11<ma21 && ma12>ma22 && CrossDN<1) {CrossDN++; CrossUP=0;}  
    
   if(CountTrades()<1) OpenPos();
   else ClosePos();

   if(TrailingStop!=0) Trailing();
   Comment("\n CrossUP: ",CrossUP,
           "\n CrossDN: ",CrossDN,
           "\n Delta: ",delta);
//----
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 3 ноября 2015, 00:52
0
Сначала сделаю, то что начал а потом уже ваш буду смотреть.
avatar

AM2

  • 2 ноября 2015, 18:40