0
нет сделок у вас опять со всеми 3-мя индикаторами. если тренд пауэр убрать, то будет немного:


//+------------------------------------------------------------------+
//|                                                       Ruslan.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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 444;      // лось
extern int TakeProfit    = 555;      // язь
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 bool One          = true;     // true - 1 сделка

extern string IndName    = "BBands_Stop_v1";
extern int    Length     = 20;       // Bollinger Bands Period
extern int    Deviation  = 2;        // Deviation was 2
extern double MoneyRisk  = 1.00;     // Offset Factor

extern string IndName2="Vertex alerts nmc 1.01";
extern int TrendPeriod   =30;
extern int ForcePeriod=35;    // для аналогии с TD&FI устанавливаем ForcePeriod = 3 * TrendPeriod
extern double LineValue=0.1;
extern double VerticalShift=0;

extern string IndName3="Vertex alerts nmc 1.01";
extern int PeriodStep=10;     // Шаг периода скользящих
extern int CountBars=10000;   // Количество отображаемых баров

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
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 blue  = iCustom(NULL,0,IndName,Length,Deviation,MoneyRisk,0,Shift);
   double red   = iCustom(NULL,0,IndName,Length,Deviation,MoneyRisk,1,Shift);

   double vblu = iCustom(NULL,0,IndName2,TrendPeriod,ForcePeriod,LineValue,VerticalShift,2,Shift);
   double vred = iCustom(NULL,0,IndName2,TrendPeriod,ForcePeriod,LineValue,VerticalShift,1,Shift);

   double pblu=iCustom(NULL,0,IndName3,PeriodStep,1,Shift);
   double pred=iCustom(NULL,0,IndName3,PeriodStep,0,Shift);

   if(blue>0 && vblu>LineValue && pblu>0)
     {
      PutOrder(0,Ask);
     }

   if(red>0 && vred>LineValue && pblu==0)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu=iCustom(NULL,0,IndName3,PeriodStep,1,Shift);
   double red=iCustom(NULL,0,IndName3,PeriodStep,0,Shift);

   if(isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      if(t!=Time[0])
        {
         if(CountTrades()<1 && One) OpenPos();
         if(!One) OpenPos();
         t=Time[0];
        }
     }

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

avatar

AM2

  • 5 июля 2018, 22:10
0
давайте сюда вставлю:


//+------------------------------------------------------------------+
//|                                                        Vinni.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
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }

input string Name1="DSS Bresert";
extern int EMA_period=8;
extern int Stochastic_period=13;
extern int Shift=1;
extern int Level=30;

input string Name2="VininI_HMA_soundamp-Alert";
extern int period=16;
extern int method=3; // MODE_SMA 
extern int price=0; // PRICE_CLOSE 
extern int sdvig=0;

datetime t=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutArrow(string name,int code,double p,datetime time,color clr)
  {
//--- создадим стрелку
   ObjectCreate(0,name,OBJ_ARROW,0,time,p);
//--- установим код стрелки
   ObjectSetInteger(0,name,OBJPROP_ARROWCODE,code);
//--- установим способ привязки
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- установим цвет стрелки
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим размер стрелки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   for(int i=0;i<1000;i++)
     {
      double dss=iCustom(NULL,0,Name1,EMA_period,Stochastic_period,0,i);
      double gre1=iCustom(NULL,0,Name2,period,method,price,sdvig,1,i);
      double red1=iCustom(NULL,0,Name2,period,method,price,sdvig,2,i);
      double gre2=iCustom(NULL,0,Name2,period,method,price,sdvig,1,i+1);
      double red2=iCustom(NULL,0,Name2,period,method,price,sdvig,2,i+1);
      double ma=iMA(NULL,0,5,2,0,0,Shift);

      if(t!=Time[0])
        {
         if(dss<Level && gre1<1000 && red2<1000 && close[i]>ma)
           {
            PutArrow("UP "+(string)time[i],233,low[i],time[i],Blue);
            Alert(_Symbol+" UP Signal!!!");
           }

         if(dss>100-Level && gre2<1000 && red1<1000 && close[i]<ma)
           {
            PutArrow("DN "+(string)time[i],234,high[i],time[i],Red);
            Alert(_Symbol+" DN Signal!!!");
           }
        }
      t=Time[0];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 5 июля 2018, 17:28
0
в первую очередь делаю то что проще, а тут вы что то лишка завернули.
avatar

AM2

  • 4 июля 2018, 23:39
0
Здесь я добавил 3 пары плюс вывод максимального значения в коммент. По реализации алгоритма индикатора полностью уже не ко мне.




//+------------------------------------------------------------------+
//|                                                      PairVol.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

input string s1="EURUSD";
input string s2="GBPUSD";
input string s3="USDCHF";
input string s4="AUDUSD";
input string s5="USDJPY";
input string s6="USDCAD";

input string s7="EURGBP";
input string s8="GBPJPY";
input string s9="NZDUSD";

input int count=10;

int vol[9];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text,string name,int x,int y)
  {
   ObjectDelete(0,name);
//--- создадим текстовую метку
   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,1);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   double h1=iHigh(s1,0,iHighest(s1,0,MODE_HIGH,count,0));
   double l1=iLow(s1,0,iLowest(s1,0,MODE_LOW,count,0));
   int v1=(int)((h1-l1)/MarketInfo(s1,MODE_POINT));
   int sp1=(int)MarketInfo(s1,MODE_SPREAD);
   vol[0]=v1;

   double h2=iHigh(s2,0,iHighest(s2,0,MODE_HIGH,count,0));
   double l2=iLow(s2,0,iLowest(s2,0,MODE_LOW,count,0));
   int v2=(int)((h2-l2)/MarketInfo(s2,MODE_POINT));
   int sp2=(int)MarketInfo(s2,MODE_SPREAD);
   vol[1]=v2;

   double h3=iHigh(s3,0,iHighest(s3,0,MODE_HIGH,count,0));
   double l3=iLow(s3,0,iLowest(s3,0,MODE_LOW,count,0));
   int v3=(int)((h3-l3)/MarketInfo(s3,MODE_POINT));
   int sp3=(int)MarketInfo(s3,MODE_SPREAD);
   vol[2]=v3;

   double h4=iHigh(s4,0,iHighest(s4,0,MODE_HIGH,count,0));
   double l4=iLow(s4,0,iLowest(s4,0,MODE_LOW,count,0));
   int v4=(int)((h4-l4)/MarketInfo(s4,MODE_POINT));
   int sp4=(int)MarketInfo(s4,MODE_SPREAD);
   vol[3]=v4;

   double h5=iHigh(s5,0,iHighest(s5,0,MODE_HIGH,count,0));
   double l5=iLow(s5,0,iLowest(s5,0,MODE_LOW,count,0));
   int v5=(int)((h5-l5)/MarketInfo(s5,MODE_POINT));
   int sp5=(int)MarketInfo(s5,MODE_SPREAD);
   vol[4]=v5;

   double h6=iHigh(s6,0,iHighest(s6,0,MODE_HIGH,count,0));
   double l6=iLow(s6,0,iLowest(s6,0,MODE_LOW,count,0));
   int v6=(int)((h6-l6)/MarketInfo(s6,MODE_POINT));
   int sp6=(int)MarketInfo(s6,MODE_SPREAD);
   vol[5]=v6;

   double h7=iHigh(s7,0,iHighest(s7,0,MODE_HIGH,count,0));
   double l7=iLow(s7,0,iLowest(s7,0,MODE_LOW,count,0));
   int v7=(int)((h7-l7)/MarketInfo(s7,MODE_POINT));
   int sp7=(int)MarketInfo(s7,MODE_SPREAD);
   vol[6]=v7;

   double h8=iHigh(s8,0,iHighest(s8,0,MODE_HIGH,count,0));
   double l8=iLow(s8,0,iLowest(s8,0,MODE_LOW,count,0));
   int v8=(int)((h8-l8)/MarketInfo(s8,MODE_POINT));
   int sp8=(int)MarketInfo(s8,MODE_SPREAD);
   vol[7]=v8;

   double h9=iHigh(s9,0,iHighest(s9,0,MODE_HIGH,count,0));
   double l9=iLow(s9,0,iLowest(s9,0,MODE_LOW,count,0));
   int v9=(int)((h9-l9)/MarketInfo(s9,MODE_POINT));
   int sp9=(int)MarketInfo(s9,MODE_SPREAD);
   vol[8]=v9;
//---
   PutLabel(s1+" VOL: "+(string)v1+" SPREAD: "+(string)sp1,s1,260,10);
   PutLabel(s2+" VOL: "+(string)v2+" SPREAD: "+(string)sp2,s2,260,30);
   PutLabel(s3+" VOL: "+(string)v3+" SPREAD: "+(string)sp3,s3,260,50);
   PutLabel(s4+" VOL: "+(string)v4+" SPREAD: "+(string)sp4,s4,260,70);
   PutLabel(s5+" VOL: "+(string)v5+" SPREAD: "+(string)sp5,s5,260,90);
   PutLabel(s6+" VOL: "+(string)v6+" SPREAD: "+(string)sp6,s6,260,110);
   PutLabel(s7+" VOL: "+(string)v7+" SPREAD: "+(string)sp7,s7,260,130);
   PutLabel(s8+" VOL: "+(string)v8+" SPREAD: "+(string)sp8,s8,260,150);
   PutLabel(s9+" VOL: "+(string)v9+" SPREAD: "+(string)sp9,s9,260,170);

   ArraySort(vol,WHOLE_ARRAY,0,MODE_DESCEND);

   Comment("\n Max Vol: ",vol[0]);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


В следующем топике можно создать двумерный массив. В первом измерении будет цифра соответствующая паре, во втором волатильность. Затем отсотировать по второму измерению и по цифровому значению определить пары с наибольшей волатильностью.

Отслеживание возрастания волатильности уже на 3-й топик, я еще пока не представляю как буду это реализовывать.
avatar

AM2

  • 4 июля 2018, 21:58
0
сигналит каждую секунду не останавливаясь)

это чтобы не проспать! :D 
поправил: www.opentraders.ru/downloads/1968/
avatar

AM2

  • 4 июля 2018, 17:53
0
скрины просьба скинуть в топик
avatar

AM2

  • 3 июля 2018, 21:53
0
Просьба все материалы скидывать в топик:







avatar

AM2

  • 3 июля 2018, 20:59
0
пересечение нуля сделал. теперь покажите на скринах каким образом отмечать пересечение уровней?



//--- зададим название индикатора
#property description "$lide$"
//--- установим строгий режим компиляции
#property strict
//--- укажем где отрисовываться индиктору
#property indicator_separate_window
//--- укажем количество буферов
#property indicator_buffers 1
//--- зададим цвет отрисовки индикатора
#property indicator_color1 clrGreenYellow
//--- установим толщину горизонтальных уровней
#property indicator_levelwidth 1
//--- установим стиль горизонтальных уровней
#property indicator_levelstyle STYLE_SOLID
//--- зададим входные параметры
extern string S_I                    = "Настройки индикатора";
extern int    count                  = 10;                    //период
extern int    flexibility            = 1;                     //гибкость
extern int    deviation_from_levels  = 1;                     //отклонение от уровней
extern string S_G                    = "Настройки графики";
extern int    counted_bars=100;                   //подсчет баров
//--- укажем массивы индикаторных буферов
double line_01[];
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit(void)
  {
   string short_name;
//--- укажем один дополнительный буфер для вычислений
   IndicatorBuffers(1);
   SetIndexBuffer(0,line_01);
//--- зададим уровни 
   IndicatorSetInteger(INDICATOR_LEVELS,2);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,count/flexibility-deviation_from_levels);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,-count/flexibility+deviation_from_levels);
//--- зададим всем уровням цвет Blue
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue);
//--- зададим отрисовку индикатора в виде линии 
   SetIndexStyle(0,DRAW_LINE,EMPTY,EMPTY,clrGreenYellow);
   SetIndexBuffer(0,line_01);
//--- зададим имя в окне DataWindow и метку
   short_name="$lide$("+string(count)+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- проверим входные параметры
   if(count<2)
     {
      Alert("Неправильное значение переменной период = ",count);
      return(INIT_FAILED);
     }
//--- если нет ошибок,то инициализация успешно завершена
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutArrow(string name,int code,double p,datetime time,color clr)
  {
//--- создадим стрелку
   ObjectCreate(0,name,OBJ_ARROW,0,time,p);
//--- установим код стрелки
   ObjectSetInteger(0,name,OBJPROP_ARROWCODE,code);
//--- установим способ привязки
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- установим цвет стрелки
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим размер стрелки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
  }
//+------------------------------------------------------------------+
//|                             $lide$                               |
//+------------------------------------------------------------------+
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[])
  {
   for(int shift=counted_bars;shift>=0;shift--)
     {
      double lowest=iLowest(_Symbol,_Period,MODE_LOW,count,shift)/flexibility;
      double highest= iHighest(_Symbol,_Period,MODE_HIGH,count,shift)/flexibility;
      line_01[shift]=lowest-highest;
     }

   if(line_01[1]>0 && line_01[2]<0) PutArrow("NULL_UP"+(string)time[0],233,low[1],time[0],Blue);
   if(line_01[1]<0 && line_01[2]>0) PutArrow("NULL_DN"+(string)time[0],234,high[1],time[0],Red);
   
   return(rates_total);
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 3 июля 2018, 20:51
0
Прошу сделать дополнение
вам в стол заказов
avatar

AM2

  • 3 июля 2018, 20:29
0
нет это слишком большой объем работы
avatar

AM2

  • 3 июля 2018, 17:37
+2
открыл, закрыл, перевернулся, часть закрыл и тралит: www.opentraders.ru/downloads/1967/

avatar

AM2

  • 2 июля 2018, 21:25
0
посмотрю сегодня
avatar

AM2

  • 2 июля 2018, 17:49