Лента последних комментариев


0
Как к платному, то всё работает как задумано *haha* 
avatar

juozas

  • 18 августа 2018, 14:26
0
От заморочек с подтверждением сигнала решил отказаться. Пробовал различные варианты фильтрации ложных сигналов при сильном тренде — толку «0». Просто работаем при пересечении уровней.
avatar

GAWroch

  • 18 августа 2018, 14:21
0
Привет Андрей и спасибо за работу, хоть и не законченную пока. Мне кажется будет проще собрать советник на индикаторе «CCI_smoothed». Заранее извиняюсь, позволил себе внести изменения в твой код, так для тебя должно быть понятнее. Трейлинг можно убрать, сделки закрываются противоположным сигналом. Вне рабочего времени сделки открываться не должны, но открытые — сопровождаются и закрываются, при наступлении условий.
<code>
//+------------------------------------------------------------------+
//|                                                      Smurfik.mq4 |
//|                                              Copyright 2018, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик

extern string IndName    = "CCI_smoothed";
input int                   CCI_Period            = 14;
input ENUM_APPLIED_PRICE    CCI_Price             = 0;
input int                   Period_Smoothed       = 3;
input ENUM_MA_METHOD        MA_Method             = 0;
extern double               cci_buy_level         = -100;
extern double               cci_sell_level        = 100;

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

bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 OpenPos()
  {
   double blu = iCustom(NULL,0,IndName,CCI_Period,CCI_Price,Period_Smoothed,MA_Method,cci_buy_level,cci_sell_level,0,Shift);
   double red = iCustom(NULL,0,IndName,CCI_Period,CCI_Price,Period_Smoothed,MA_Method,cci_buy_level,cci_sell_level,1,Shift);

   if(blu>0)
     {
      PutOrder(0,Ask);
     }

   if(red>0)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double blu = iCustom(NULL,0,IndName,CCI_Period,CCI_Price,Period_Smoothed,MA_Method,cci_buy_level,cci_sell_level,0,Shift);
   double red = iCustom(NULL,0,IndName,CCI_Period,CCI_Price,Period_Smoothed,MA_Method,cci_buy_level,cci_sell_level,1,Shift);

   if(red>0)
     {
      CloseAll(0);
     }

   if(blu>0)
     {
      CloseAll(1);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu = iCustom(NULL,0,IndName,CCI_Period,CCI_Price,Period_Smoothed,MA_Method,cci_buy_level,cci_sell_level,0,Shift);
   double red = iCustom(NULL,0,IndName,CCI_Period,CCI_Price,Period_Smoothed,MA_Method,cci_buy_level,cci_sell_level,1,Shift);

   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin)) OpenPos();
   else ClosePos();

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

   Comment("\n blu: ",blu,
           "\n red: ",red);
  }
//+------------------------------------------------------------------+
</code>

Ещё раз извиняюсь, если поступаю не корректно. С уважением Вячеслав.
avatar

GAWroch

  • 18 августа 2018, 14:12
0
Привет можешь убрать риск а то я не разобрался и добавить в настройки множитель лота

А я против*razdacha* 
avatar

Kashtan

  • 18 августа 2018, 11:21
0
нужно описать все намного подробнее. где в каких ситуациях не срабатывает, приложить логи скрины, т.е. все то что поможет мне найти причину
avatar

AM2

  • 18 августа 2018, 10:50
0
Подскажите, пожалуйста, как сделать, чтобы советник открывал одну сделку в день? Вышел сигнал — открыл сделку. Сигнал отработал по стопу/тейку. Вышел следующий сигнал в этот же день — всё, советник сегодня больше не торгует.
avatar

Forex-Viewer

  • 18 августа 2018, 10:43
0
так метка удаляется только после удаления индикатора с графика:


void OnDeinit(const int reason)
  {
   Comment("");
   if(REASON_REMOVE == _UninitReason) ObjectDelete(0,"L");
  }


при смене ТФ остается на месте

//+------------------------------------------------------------------+
//|                                                         ATRM.mq4 |
//|                                              Copyright 2018, AM2 |
//|                                      http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link      "http://www.forexsyatems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

#define KEY_UP             38 
#define KEY_DOWN           40 

input int Shift=0;
int atr=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   if(REASON_REMOVE == _UninitReason) ObjectDelete(0,"L");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text)
  {
   ObjectDelete(0,"L");
//--- создадим текстовую метку
   ObjectCreate(0,"L",OBJ_LABEL,0,0,0);
//--- установим координаты метки
   ObjectSetInteger(0,"L",OBJPROP_XDISTANCE,55);
   ObjectSetInteger(0,"L",OBJPROP_YDISTANCE,10);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"L",OBJPROP_CORNER,1);
//--- установим текст
   ObjectSetString(0,"L",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"L",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"L",OBJPROP_FONTSIZE,12);
//--- установим цвет
   ObjectSetInteger(0,"L",OBJPROP_COLOR,Red);
  }
//+------------------------------------------------------------------+ 
//| ChartEvent function                                              | 
//+------------------------------------------------------------------+ 
void OnChartEvent(const int id,         // идентификатор события   
                  const long& lparam,   // параметр события типа long 
                  const double& dparam, // параметр события типа double 
                  const string& sparam  // параметр события типа string 
                  )
  {
//--- нажатие кнопки на клавиатуре 
   if(id==CHARTEVENT_KEYDOWN)
     {
      if(lparam==38) PutLabel((string)atr);
      if(lparam==40) ObjectDelete(0,"L");
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   atr=(int)((iHigh(NULL,PERIOD_MN1,Shift)-iLow(NULL,PERIOD_MN1,Shift))/_Point);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 18 августа 2018, 08:24
0
Премного благодарен, всё работает как задумано*budenov* 
avatar

Kashtan

  • 17 августа 2018, 22:33
0
пока набросок. входы выходы по одному индикатору. куда и какой уровень пересекаем для подтверждения сигнала?


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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int TrailingStop  = 0;        // трал
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик

extern string IndName    = "CCI smoothed arrow";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }

bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 OpenPos()
  {
   double blu = iCustom(NULL,0,IndName,0,Shift);
   double red = iCustom(NULL,0,IndName,1,Shift);

   if(blu>0)
     {
      PutOrder(0,Ask);
     }

   if(red>0)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double blu = iCustom(NULL,0,IndName,0,Shift);
   double red = iCustom(NULL,0,IndName,1,Shift);

   if(red>0)
     {
      CloseAll(0);
     }

   if(blu>0)
     {
      CloseAll(1);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu = iCustom(NULL,0,IndName,0,Shift);
   double red = iCustom(NULL,0,IndName,1,Shift);

   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin)) OpenPos();
   else ClosePos();

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

   Comment("\n blu: ",blu,
           "\n red: ",red);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 17 августа 2018, 21:33
0
потестил это… не айс*rabota*  бывает что цена закрытие выше цены открытия но советник считает ее проигрышной*???* 
avatar

Kudryashov

  • 16 августа 2018, 22:22
0
К сожалению самостоятельно переделывать не умею.
Хотел попросить AM2 — Андрей это сделать, но адресовать ему мою просьбу пока не имею возможности.
Сегодня только зарегистрировался на сайте.
Писать новый заказ пока не имею возможности.
Писать личные сообщения пока мне тоже не позволено.
Если согласитесь мне помочь обратить внимание AM2 — Андрея на мое сообщения, буду очень признателен.
avatar

Odinochka

  • 16 августа 2018, 21:56
0
Немного исправил:
В настройках советника должна присутствовать возможность настройки значений Moving

Average:
1. Период
2. Сдвиг
3. Метод МА: Simple, Exponential, Smoothed, Linear Weighted.
4. Применить к: Close, Open, High, Low
avatar

Odinochka

  • 16 августа 2018, 21:46
+1
1. открыли позу без стопов, модифицировали:



2. просели, усреднили, тейк на первый ордер стопы на второй:



3. закрыли оба по тейку:



www.opentraders.ru/downloads/2024/

дальше все к платному.

avatar

AM2

  • 16 августа 2018, 21:39
0
я не умею рисовать суть в том что первый ордер например по сигналам МА открылся на продажу но цена пошла в противоположенном направлении и продолжает в течении часа увеличивать убыток, через час после открытия первого лота открывается ставка в противоположенном направлении и закрывает обе ставки при достижении положительного профита например в 10$
Коэффициент умножения противоположенного лота можно увеличивать с панели
Размер суммарного профита тоже выставлять с панели.
За ранее огромное спасибо!!!
avatar

Alkmena

  • 16 августа 2018, 20:52
0
Этого не проверял как увидел что к ручному ТП не ставит

сейчас допишу
avatar

AM2

  • 16 августа 2018, 20:37
0
он у тебя с магиком 123 работает а у ручного 0.
avatar

AM2

  • 16 августа 2018, 20:36
0
Для меня этот советник уже не актуален, можете брать его себе и переделывать как Вам угодно)
avatar

oyama

  • 16 августа 2018, 20:35
Начать торговлю с Альпари