0
Осталось только советнику увеличивать периоды МА  

Да да, про таймфрейм еще не забудь! :D 
avatar

AM2

  • 26 октября 2015, 19:09
0
А вот это код увеличит стопы пропорционально увеличению лота многократно, в отличие от первого варианта. Дает за 10 лет по 50% при просадке 40.
www.opentraders.ru/downloads/906/




//+------------------------------------------------------------------+
//|                                                        Laban.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 StopLoss=200;
extern int TakeProfit=200;
extern int Slip=20;
extern int Hour_Start=8;
extern int Hour_Stop =17;
extern int Ma1 = 9;
extern int Ma2 = 22;
extern double Lots=0.01;
extern double KLot=2;
extern double KStop=2;
extern double MaxLot=5;
extern int Magic=8;

int mode=0;
bool b=true,s=true;
double stop=0,take=0;
//+------------------------------------------------------------------+
void OnTick()
  {
//---- 
   int p=0,r=0;
//---- get Indicatorrs 
   double ma1=iMA(NULL,0,Ma1,0,MODE_EMA,PRICE_CLOSE,1);
   double ma2=iMA(NULL,0,Ma2,0,MODE_EMA,PRICE_CLOSE,1);
//----

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        }
     }

//---- buy 
   if(ma1>ma2 && b && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Ask-stop*Point,Ask+take*Point,"",Magic,0,Blue);
         b=false;
         s=true;
        }
     }

//---- sell 
   if(ma1<ma2 && s && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,Bid+stop*Point,Bid-take*Point,"",Magic,0,Red);
         b=true;
         s=false;
        }
     }

   Comment("\n stop: ",stop,"\n take: ",take);
//----
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=0;
   if(OrdersHistoryTotal()==0)
     {
      lot=Lots;
      take=TakeProfit;
      stop=StopLoss;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()>0)
        {
         lot=Lots;
         take=TakeProfit;
         stop=StopLoss;
        }
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
         take=MathAbs((OrderOpenPrice()-OrderTakeProfit())/Point)*KStop;
         stop=MathAbs((OrderOpenPrice()-OrderStopLoss())/Point)*KStop;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 26 октября 2015, 16:29
0
У меня пока реализован такой рабочий вариант:


//+------------------------------------------------------------------+
//|                                                        Laban.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 StopLoss=20;
extern int TakeProfit=20;
extern int Hour_Start=8;
extern int Hour_Stop =17;
extern int Ma1 = 9;
extern int Ma2 = 22;
extern double Lots=0.01;
extern double KLot=1.5;
extern double MaxLot=5;
extern int Magic=8;

int mode=0;
bool b=true,s=true;
double stop=0,take=0;
//+------------------------------------------------------------------+
void OnTick()
  {
//---- 
   int p=0,r=0;
//---- get Indicatorrs 
   double ma1=iMA(NULL,0,Ma1,0,MODE_EMA,PRICE_CLOSE,1);
   double ma2=iMA(NULL,0,Ma2,0,MODE_EMA,PRICE_CLOSE,1);
//----

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        }
     }

//---- buy 
   if(ma1>ma2 && b && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
         b=false;
         s=true;
        }
     }

//---- sell 
   if(ma1<ma2 && s && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
         b=true;
         s=false;
        }
     }

   if(p>0 && mode<1) Stop();
   if(p<1) mode=0;
//----
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=0,tp=0,sl=0;
   if(OrdersHistoryTotal()==0)
     {
      lot=Lots;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()>0)
        {
         lot=Lots;
        }
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
void StopMode()
  {
   bool m;
   double sl=0,tp=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)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-StopLoss*Point,OrderTakeProfit()+TakeProfit*Point,0,Yellow);
               return;
              }

            if(OrderType()==OP_SELL)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+StopLoss*Point,OrderTakeProfit()-TakeProfit*Point,0,Yellow);
               return;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
void Stop()
  {
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()<0)
           {
            StopMode();
            mode++;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 26 октября 2015, 15:50
0
Для вставки кода пользуйтесь тегами
avatar

AM2

  • 26 октября 2015, 15:20
0
пробовал вставить эту же функцию но при срабатывании профита. лот модифицируется и ставит лот последнего сработанного ордера.

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

AM2

  • 26 октября 2015, 15:05
0
Добавил входы по пересечению МА: www.opentraders.ru/downloads/905/

avatar

AM2

  • 26 октября 2015, 14:39
0
Сейчас добавлю входы по машкам.
avatar

AM2

  • 26 октября 2015, 14:02
0
Вот определил. Одно условие есть.




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

//--- Inputs
extern double StopLoss     = 500;
extern double TakeProfit   = 500;
extern double Lots         = 0.1;
//----
extern int SPPeriod       = 16;
extern int Slip           = 30;
extern int Magic          = 26102015;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
//--- get Moving Average 
   double SPGreen1=iCustom(Symbol(),0,"superprofit",SPPeriod,0,1);
   double SPARed1=iCustom(Symbol(),0,"superprofit",SPPeriod,1,1);
   double SPGreen2=iCustom(Symbol(),0,"superprofit",SPPeriod,0,2);
   double SPARed2=iCustom(Symbol(),0,"superprofit",SPPeriod,1,2);   
//--- sell conditions
   if(SPARed1<1000 && SPGreen2<1000)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
      return;
     }
//--- buy conditions
   if(SPGreen1<1000 && SPARed2<1000)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double SPGreen1=iCustom(Symbol(),0,"superprofit",SPPeriod,0,1);
   double SPRed1=iCustom(Symbol(),0,"superprofit",SPPeriod,1,1);
   double SPGreen2=iCustom(Symbol(),0,"superprofit",SPPeriod,0,2);
   double SPRed2=iCustom(Symbol(),0,"superprofit",SPPeriod,1,2);   

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

   Comment("\n SPGreen1: ",SPGreen1,
           "\n SPRed1: ",SPRed1,
           "\n SPGreen2: ",SPGreen2,
           "\n SPRed2: ",SPRed2);
//---
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 26 октября 2015, 13:45
0
Пока что встрял на том что не определяется программно момент смены цвета индикатора.
avatar

AM2

  • 26 октября 2015, 13:10
0
Сейчас займусь.
avatar

AM2

  • 26 октября 2015, 12:27
0
Данный код увеличит стоп в 2 раза в случае получения убытка:




//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
extern int StopLoss=20;
extern int TakeProfit=20;
extern int Hour_Start=8;
extern int Hour_Stop =17;
extern int Ma1 = 9;
extern int Ma2 = 22;
extern double Lots=0.01;
extern int Magic=8;

int mode=0;
bool b=true,s=true;
double stop=0,take=0;
//+------------------------------------------------------------------+
void OnTick()
  {
//---- 
   int p=0,r=0;
//---- get Indicatorrs 
   double ma1=iMA(NULL,0,Ma1,0,MODE_EMA,PRICE_CLOSE,1);
   double ma2=iMA(NULL,0,Ma2,0,MODE_EMA,PRICE_CLOSE,1);
//----

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        }
     }

//---- buy 
   if(ma1>ma2 && b && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
         b=false;
         s=true;
        }
     }

//---- sell 
   if(ma1<ma2 && s && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
         b=true;
         s=false;
        }
     }

   if(p>0 && mode<1) Stop();
   if(p<1) mode=0;
//----
   return;
  }
//+------------------------------------------------------------------+
void StopMode()
  {
   bool m;
   double sl=0,tp=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)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-StopLoss*Point,OrderTakeProfit()+TakeProfit*Point,0,Yellow);
               return;
              }

            if(OrderType()==OP_SELL)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+StopLoss*Point,OrderTakeProfit()-TakeProfit*Point,0,Yellow);
               return;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
void Stop()
  {
   bool sel=OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
     {
      if(OrderProfit()<0)
        {
         StopMode();
         mode++;
        }
     }
   return;
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 26 октября 2015, 11:46
0
Сейчас посмотрю что можно сделать.
avatar

AM2

  • 26 октября 2015, 11:06
0
Править этот код я не возьмусь, а ТЗ еще можно рассмотреть.
avatar

AM2

  • 24 октября 2015, 01:30
0
Можно будет глянуть, но уже в другом топике.
avatar

AM2

  • 24 октября 2015, 01:10
0
Нарисуйте пожалуйста входы на скрине, чтобы было понятнее.
avatar

AM2

  • 24 октября 2015, 01:03
0
Сделал такой вариант. Если РСИ колеблется между уровнями, значит флет и ставим лимитники. Если вышел за уровни. значит тренд и ставим стоповые.
www.opentraders.ru/downloads/900/

avatar

AM2

  • 24 октября 2015, 00:55
0
Посмотрел индикаторы. Один вариант параболика, другой боллинджер бэндс. Зачем мудрить лучше сразу делать на стандартных.
avatar

AM2

  • 23 октября 2015, 16:57
0
Добавлю индикатор.
avatar

AM2

  • 23 октября 2015, 16:33
0
Нужно смотреть код советника и подробнее описать алгоритм увеличения стопов.
avatar

AM2

  • 23 октября 2015, 13:27