0
А если 5 таймфреймов? все машки вверх — одна комбинация. все вниз — вторая. это нереально?


ни одной сделки, вот код:


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

//--- Inputs
extern double Lots        = 0.1;      // лот
extern double Risk        = 0;        // >0 риск
extern int StopLoss       = 1500;     // лось
extern int TakeProfit     = 2000;     // язь
extern int BULevel        = 0;        // уровень БУ
extern int BUPoint        = 30;       // пункты БУ
extern int TrailingStop   = 0;        // трал
extern int Slip           = 30;       // реквот
extern int Shift          = 1;        // на каком баре сигнал индикатора
extern int Magic          = 123;      // магик

extern int MAPeriod       = 35;       // период МА
extern int MAShift        = 0;        // сдвиг МА
extern ENUM_MA_METHOD MAMethod = 0;   // метод МА
extern ENUM_APPLIED_PRICE MAPrice = 0; // цены МА

extern ENUM_TIMEFRAMES TF1 = 1;       // M1
extern ENUM_TIMEFRAMES TF2 = 5;       // M5
extern ENUM_TIMEFRAMES TF3 = 15;      // M15
extern ENUM_TIMEFRAMES TF4 = 30;      // M30
extern ENUM_TIMEFRAMES TF5 = 60;      // H1

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               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((OrderOpenPrice()-Ask)>TrailingStop*_Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*_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 Lot()
  {
   double lot=Lots;
   double MaxLot=MarketInfo(NULL,MODE_MAXLOT);
   if(Risk>0)
      lot=AccountBalance()*Risk/100000;// 10000*Risk/100000=1
   if(lot>MaxLot)
      lot=MaxLot;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double ma1=iMA(NULL,TF1,MAPeriod,MAShift,MAMethod,MAPrice,Shift);
   double ma2=iMA(NULL,TF2,MAPeriod,MAShift,MAMethod,MAPrice,Shift);
   double ma3=iMA(NULL,TF3,MAPeriod,MAShift,MAMethod,MAPrice,Shift);
   double ma4=iMA(NULL,TF4,MAPeriod,MAShift,MAMethod,MAPrice,Shift);
   double ma5=iMA(NULL,TF5,MAPeriod,MAShift,MAMethod,MAPrice,Shift);

   double ma12=iMA(NULL,TF1,MAPeriod,MAShift,MAMethod,MAPrice,Shift+1);
   double ma22=iMA(NULL,TF2,MAPeriod,MAShift,MAMethod,MAPrice,Shift+1);
   double ma32=iMA(NULL,TF3,MAPeriod,MAShift,MAMethod,MAPrice,Shift+1);
   double ma42=iMA(NULL,TF4,MAPeriod,MAShift,MAMethod,MAPrice,Shift+1);
   double ma52=iMA(NULL,TF5,MAPeriod,MAShift,MAMethod,MAPrice,Shift+1);

   if(BULevel>0)
      BU();
   if(TrailingStop>0)
      Trailing();

   if(CountTrades()<1)
     {
      if(ma1>ma12 && ma2>ma22 && ma3>ma32 && ma4>ma42 && ma5>ma52)
        {
         PutOrder(0,Ask);
        }
      if(ma1<ma12 && ma2<ma22 && ma3<ma32 && ma4<ma42 && ma5<ma52)
        {
         PutOrder(1,Bid);
        }
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 7 декабря 2019, 10:02
0
делал подобные. смотрите в базе
avatar

AM2

  • 7 декабря 2019, 09:22
0
продержался 20 лет с настройками по умолчанию. но доходность низкая 7-10% в год.



www.opentraders.ru/downloads/2499/

avatar

AM2

  • 5 декабря 2019, 21:04
0
на 20-е
avatar

AM2

  • 5 декабря 2019, 20:27
0
входы на ретесте: www.opentraders.ru/downloads/2498/

avatar

AM2

  • 4 декабря 2019, 21:57
0
делать сигнал или сами пропишете?
avatar

AM2

  • 4 декабря 2019, 19:49
0
основную логику я вам прописал. сигнал сейчас пересечение ценой МА. поставите какой нужно.



www.opentraders.ru/downloads/2498/

avatar

AM2

  • 4 декабря 2019, 19:42
0
со входами еще непонятно. на рисунке одно, текстом другое в коментах третье
avatar

AM2

  • 4 декабря 2019, 18:58
0
скрины
avatar

AM2

  • 4 декабря 2019, 17:30
0
по рынку если бай, то ставите стоп ниже бида, нужный риск. тейк установится сам и жмете кнопку. для села тоже но стоп ставите выше бида
avatar

AM2

  • 4 декабря 2019, 17:27
0
на 19-е
avatar

AM2

  • 4 декабря 2019, 17:24
0
интерфейс нужно запрограммировать, куча формул, все надо с нуля писать.

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




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

//--- Inputs
extern double KTake      = 2;        // увеличение тейка
extern int BULevel       = 150;      // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 200;      // трал
extern int TrailingStep  = 20;       // шаг трала
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

double lot=1;
double risk=1;
double stop=0;
double take=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",140,30,"BUY");
   PutButton("S",80,30,"SELL");

   PutEdit("R",90,70,"1000");
   PutLable("LR",140,67,"RISK $");

   PutEdit("T",90,100,"");
   PutLable("LT",115,97,"TP");

   PutEdit("L",90,130,"1.1060");
   PutLable("LL",115,127,"SL");

   PutEdit("P",90,160,"");
   PutLable("LP",115,157,"PR");

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"R");
   ObjectDelete(0,"LR");
   ObjectDelete(0,"T");
   ObjectDelete(0,"LT");
   ObjectDelete(0,"L");
   ObjectDelete(0,"LL");
   ObjectDelete(0,"P");
   ObjectDelete(0,"LP");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);

//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutEdit(string name,int x,int y,string text)
  {
//--- создадим поле ввода
   ObjectCreate(0,name,OBJ_EDIT,0,0,0);
//--- установим координаты объекта
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размеры объекта
   ObjectSetInteger(0,name,OBJPROP_XSIZE,60);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим способ выравнивания текста в объекте
   ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_CENTER);
//--- установим (true) или отменим (false) режим только для чтения
   ObjectSetInteger(0,name,OBJPROP_READONLY,false);
//--- установим угол графика, относительно которого будут определяться координаты объекта
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLable(string name,int x,int y,string text)
  {
//--- создадим текстовую метку
   ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- установим координаты метки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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(stop>0)
         sl=NormalizeDouble(stop,_Digits);
      if(take>0)
         tp=NormalizeDouble(take,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;

      if(stop>0)
         sl=NormalizeDouble(stop,_Digits);
      if(take>0)
         tp=NormalizeDouble(take,_Digits);
     }

   r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(BULevel>0)
      BU();
   if(TrailingStop>0)
      Trailing();

   risk=(double)ObjectGetString(0,"R",OBJPROP_TEXT);
   stop=(double)ObjectGetString(0,"L",OBJPROP_TEXT);

   if(stop<Ask)
     {
      lot=NormalizeDouble((risk)/((Ask-stop)/_Point),2);
      take=NormalizeDouble(Bid+(Ask-stop)*KTake,_Digits);
      ObjectSetString(0,"T",OBJPROP_TEXT,(string)take);
     }

   if(stop>Bid)
     {
      lot=NormalizeDouble((risk)/((stop-Bid)/_Point),2);
      take=NormalizeDouble(Ask+(stop-Ask)*KTake,_Digits);
      ObjectSetString(0,"T",OBJPROP_TEXT,(string)take);
     }

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      PutOrder(0,Ask);
      ObjectSetInteger(0,"B",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      PutOrder(1,Bid);
      ObjectSetInteger(0,"S",OBJPROP_STATE,false);
     }

   Comment("\n Lot: ",lot,
           "\n Stop: ",ObjectGetString(0,"L",OBJPROP_TEXT),
           "\n Take: ",ObjectGetString(0,"T",OBJPROP_TEXT));
  }
//+------------------------------------------------------------------+



сейчас еще чуток буду делать.
avatar

AM2

  • 3 декабря 2019, 18:51
0
за простое задание возьмусь
avatar

AM2

  • 3 декабря 2019, 18:43
+1
начал делать. конца не видно. так что до лучших времен
avatar

AM2

  • 2 декабря 2019, 22:15
0
на 17-е
avatar

AM2

  • 2 декабря 2019, 21:22
0
на 16-е
avatar

AM2

  • 2 декабря 2019, 21:19
Начать торговлю с Альпари