← К каталогу
Исходный код · ID 2873

CM_Strength

cm_strength_plsoft _v0.1.mq4

Похожие материалы по тегам

indicator mtf liquidity stack for tradingview.pineTradingView · 1 общих теговindicator harmonic lab for tradingview.pineTradingView · 1 общих теговgoldlevelbreakout 1.00 @simpleforextools.mq4MQL4 / MetaTrader 4 · 1 общих теговearnwithjocker.pineTradingView · 1 общих теговindicator market trajectory mk1 for tradingview.pineTradingView · 1 общих теговgaoxing daily breakout v1.4.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный файл является пользовательским индикатором для MetaTrader 4, который отображает на графике аналитическую информацию о 28 валютных парах. Индикатор рассчитывает и выводит на экран относительную силу валют, процент изменения цены за заданный таймфрейм, положение цены относительно дневного диапазона, спред, соотношение Bid и другие метрики. Также предусмотрены визуальные оповещения о событиях, например, при выходе цены за определённые уровни или при изменении силы валюты.

Входные параметры позволяют настраивать расположение элементов на графике, таймфрейм для расчёта ROC, параметры для анализа волатильности и пробоев, а также включать режим отладки. Индикатор не выполняет торговых операций и не даёт гарантий прибыли; он предназначен исключительно для информационной поддержки трейдера.

Все расчёты производятся на основе рыночных данных, доступных в терминале. Индикатор использует стандартные функции MQL4 для получения котировок и создания графических объектов. Пользовательские настройки включают как числовые, так и строковые параметры, а также переключатели.

Настройки программы

НастройкаОписание
z_axis Шаг по Z — Шаг по вертикали между строками.
x_axis Смещение по X — Горизонтальное смещение для отображения текста.
y_axis Смещение по Y — Вертикальное смещение для отображения текста.
ROC Разделитель ROC — Разделитель для группы настроек ROC.
TimeFrameROC Таймфрейм ROC — Таймфрейм для расчёта скорости изменения цены (ROC).
note3 Заметка ROC — Текстовая заметка для группы ROC.
AlertRoc Порог оповещения ROC — Пороговое значение для оповещения об изменении цены в процентах.
FIBO Разделитель Фибоначчи — Разделитель для группы настроек Фибоначчи.
timeframe Таймфрейм Фибоначчи — Таймфрейм для расчёта уровней Фибоначчи.
lookback Количество свечей Фибоначчи — Количество свечей для расчёта уровней Фибоначчи.
lastbar Начальный бар Фибоначчи — Начальный бар для расчёта уровней Фибоначчи.
BREAKOUT Разделитель пробоя — Разделитель для группы настроек пробоя.
NumberOfDays Количество дней — Количество дней для анализа.
periodBegin Начало периода — Время начала периода для анализа пробоя.
periodEnd Конец периода — Время окончания периода для анализа пробоя.
BoxEnd Конец диапазона — Время окончания диапазона для анализа пробоя.
TIMEMACHINE Разделитель времени — Разделитель для группы настроек времени.
TimeZoneOfData Часовой пояс данных — Часовой пояс данных графика относительно GMT.
TimeZoneOfSession Часовой пояс сессии — Целевой часовой пояс сессии относительно GMT.
DebugLogger Отладочный журнал — Включает вывод отладочных сообщений в журнал.
Получить полный код

Поиск по коду файла

???//+------------------------------------------------------------------+

#property version   "1.00"
#property strict
#property indicator_chart_window

#define BullColor Lime
#define BearColor Red

#define NONE 0
#define DOWN -1
#define UP 1

#define ALERT_BAR 1

sinput int                       z_axis                     = 12;
sinput int                       x_axis                     = 10;
sinput int                       y_axis                     = 50;

input string ROC= "-------------------------";
extern ENUM_TIMEFRAMES    TimeFrameROC              = PERIOD_M30;        // Time frame BBB
extern string note3 = "ROC";
extern double AlertRoc = 0.1;
input string FIBO= "-------------------------";
input ENUM_TIMEFRAMES timeframe     = PERIOD_H1;          // Timeframe Fibonacci corto
input int lookback                  = 60;                 // Numero di candele Fibonacci corto 
input int lastbar                   = 0;                  // Partenza Fibonacci corto
input string BREAKOUT= "-------------------------";
extern int    NumberOfDays = 1;        
extern string periodBegin    = "05:00"; 
extern string periodEnd      = "09:00";   
extern string BoxEnd         = "09:00"; 
input string TIMEMACHINE= "-------------------------";                  // Dati numero candela
extern int TimeZoneOfData= 3;                                           // chart time zone (from GMT)
extern int TimeZoneOfSession= 0;                                        // dest time zone (from GMT) 
extern bool DebugLogger = false; 
bool                      UseDefaultPairs            = true;               // Use the default 28 pairs
string                    OwnPairs                   = "";                 // Comma seperated own pair list

static datetime g_lastCandleOpenTime; 

string DefaultPairs[] = {"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","CADCHF","CADJPY","CHFJPY","EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD","EURUSD","GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD","NZDCAD","NZDCHF","NZDJPY","NZDUSD","USDCAD","USDCHF","USDJPY"};
string TradePairs[];
string curr[8] = {"USD","EUR","GBP","JPY","AUD","NZD","CAD","CHF"};
string EUR[7] = {"EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD","EURUSD"};
string GBP[6] = {"GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD"};
string GBP_R[1] = {"EURGBP"};
string CHF[1] = {"CHFJPY"};
string CHF_R[6] = {"AUDCHF","CADCHF","EURCHF","GBPCHF","NZDCHF","USDCHF"};
string USD[3] = {"USDCAD","USDCHF","USDJPY"};
string USD_R[4] = {"AUDUSD","EURUSD","GBPUSD","NZDUSD"};
string CAD[2] = {"CADCHF","CADJPY"};
string CAD_R[5] = {"AUDCAD","EURCAD","GBPCAD","NZDCAD","USDCAD"};
string NZD[4] = {"NZDCAD","NZDCHF","NZDJPY","NZDUSD"};
string NZD_R[3] = {"AUDNZD","EURNZD","GBPNZD"};
string AUD[5] = {"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD"};
string AUD_R[2] = {"EURAUD","GBPAUD"};
string JPY_R[7] = {"AUDJPY","CADJPY","CHFJPY","EURJPY","GBPJPY","NZDJPY","USDJPY"};

double currstrength[8];
double prevstrength[8];
string postfix=StringSubstr(Symbol(),6,6);

   string clos;      
   string plsoft;  
   string subfolder="";
   string namafile="";
   string date_="";
   string time_="";          
   string a="|";
   int    handlefile=0;
   bool   writefile=false;

   double ChangeArray[28]; //Array for Pairs Change
   int    cF = 100; //Coefficient of scale
   int    num,Zero,Wbar,Hbar,Xsize,Ysize; 

struct pairinf {
   double PairPip;
   int pipsfactor;
   double Pips;
   double PipsSig;
   double Pipsprev;
   double Spread;
   double point;
   int lastSignal;
   int    base;
   int    quote;   
}; pairinf pairinfo[];

struct currency 
  {
   string            curr;
   double            strength;
   double            prevstrength;
   double            crs;
   int               sync;
   datetime          lastbar;
  }
; currency currencies[8];

struct signal
 {
  string symbol;

  double range;
  double range1;
  double ratio;
  double ratio1;
  double bidratio;
  double fact;
  double strength;
  double strength_old;
  double strength1;
  double strength2;
  double calc;
  double strength3;
  double strength4;
  double strength5;
  double strength6;
  double strength7;
  double strength8;
  double strength_Gap;
  double hi;
  double lo;
  double prevratio;
  double prevbid;
  double open;
  double close;
  double bid;
  double point;
  double Signalperc;
  double SigRatio;
  double SigRelStr;
  double SigBSRatio;
  double SigCRS;
  double SigGap;
  double SigGapPrev;
  double SigRatioPrev;

  int shift;
 }; signal signals[];

   string BaseCur, QuoteCur, tMessage;   
   double BaseVal, QuoteVal, PairVal;
   string Symb_text;
   double Symb_value;

   string FirstCurr = "";
   string SecondCurr = "";

   int BidRatio[28];
   double priceLow[28]; 
   double priceHigh[28];
   int Jolly[28];
   int    alertmail[28][7][2];   

   double HiPrice, LoPrice, Range;
   datetime StartTime;
   double iBarBegin[28]; 
   double iBarEnd[28];  
   double dPriceHigh[28] ;
   double dPriceLow[28];

   color MyColor;

int OnInit()
  {
      // код доступен только после оплаты
   }

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[])
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {

  }

void OnTimer()
  {

   GetRoc();
   GetSignals();
   displayMeter();

   GetCurr();
   GetBreakout();

  }

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
 {
    if(id==CHARTEVENT_OBJECT_CLICK){ 

    string pairStr = ObjectGetString(0,StringSubstr(sparam,0,"Symb_"+IntegerToString(id)),OBJPROP_TEXT);

          if( pairStr != ChartSymbol(ChartID())){
           ChartSetSymbolPeriod(ChartID(),pairStr,PERIOD_CURRENT); 
          }

     if (StringFind(sparam,"MyTastoB") >= 0)
      {          
        for(int t=0; t<28; t++){
          GetMatrix(t, 370+x_axis, (t*z_axis)+y_axis);
         }
      }
   }   
 }

void GetBreakout()
  {

  datetime dtTradeDate=TimeCurrent();
  datetime dtTimeBegin, dtTimeEnd, dtTimeObjEnd;

  dtTimeBegin = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + periodBegin);
  dtTimeEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + BoxEnd);
  dtTimeObjEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + BoxEnd);

  int x;

     for (int sym = 0; sym < ArraySize(TradePairs); sym++) {
      if(_Symbol == TradePairs[sym]) x = sym;
     } 

  iBarBegin[x] = iBarShift(TradePairs[x], timeframe, dtTimeBegin);
  iBarEnd[x] = iBarShift(TradePairs[x], timeframe, dtTimeEnd);  
  dPriceHigh[x] = High[iHighest(TradePairs[x], timeframe, MODE_HIGH, iBarBegin[x]-iBarEnd[x], iBarEnd[x])];
  dPriceLow[x] =  Low[iLowest (TradePairs[x], timeframe, MODE_LOW , iBarBegin[x]-iBarEnd[x], iBarEnd[x])];

     double contoA = dPriceHigh[x] - iClose(TradePairs[x],timeframe ,0);
     double contoB = dPriceLow[x] - iClose(TradePairs[x],timeframe  ,0);

          if(contoA <0) MyColor = clrGreenYellow;
     else if(contoB >0) MyColor = clrRed;
     else MyColor = clrWhiteSmoke;

         int passo = 4;

         switch(x)
           {
            case 2 : passo=3;     break;
            case 6 : passo=3;     break;            
            case 7 : passo=2;     break;
            case 12 : passo=2;    break;            
            case 18 : passo=2;    break;   
            case 23 : passo=3;    break; 
            case 27 : passo=2;    break;                                                
           }

     SetText("price"+IntegerToString(x),DoubleToStr(iClose(TradePairs[x],0,0),passo),x_axis+200,(x*z_axis)+y_axis,MyColor,10);                                                             

  }

void GetRoc()
  {
   double totPairArray=0; int SpostaX = 12;

   for(int i=0; i<28; i++)
     {      
      totPairArray = totPairArray+ChangeArray[i];                              
      ChangeArray[i]=SymbolChange(TradePairs[i],TimeFrameROC);

      if(ChangeArray[i]<0)
        {        
          SetText("roc"+IntegerToString(i),DoubleToString(ChangeArray[i],2)+"%",x_axis+320,(i*z_axis)+y_axis,color_for_Roc(ChangeArray[i]),8);  
          alertmail[i][4][0] = 0;      
        }
      else
        {                
         SetText("roc"+IntegerToString(i),DoubleToString(ChangeArray[i],2)+"%",x_axis+320,(i*z_axis)+y_axis,color_for_Roc(ChangeArray[i]),8);
         alertmail[i][4][0] = 1;                         
        }                            

     }

   int max = ArrayMaximum(ChangeArray, WHOLE_ARRAY, 0);
   int min = ArrayMinimum(ChangeArray, WHOLE_ARRAY, 0);

   double tmp=0;

   if(ChangeArray[max]>MathAbs(ChangeArray[min])) tmp=ChangeArray[max];
   else tmp=MathAbs(ChangeArray[min]);

   if(tmp*cF>Ysize/2) cF--;
   if((Ysize/2-tmp*cF)>20) cF++;
  }    

void GetCurr()
  {

   for(int j=0; j<28; j++)
    {

      WriteSuperMinMax(TradePairs[j],j);

      BaseCur    = StringSubstr(TradePairs[j],0,3)+"currdig";
      QuoteCur   = StringSubstr(TradePairs[j],3,3)+"currdig";       

      SetText("SymbolA_"+IntegerToString(j),ObjectDescription(BaseCur) ,x_axis+90,(j*z_axis)+y_axis,color_for_profit(ObjectDescription(BaseCur))  ,10); 
      SetText("SymbolB_"+IntegerToString(j),ObjectDescription(QuoteCur),x_axis+110,(j*z_axis)+y_axis,color_for_profit(ObjectDescription(QuoteCur)) ,10); 

      string matrix= IntegerToString(j)+","+IntegerToString(DaySearch())+","+IntegerToString(0); 
      double diff = StringToDouble(ObjectDescription(BaseCur))  - StringToDouble(ObjectDescription(QuoteCur)) ;
      int Passo ; if (diff <=0  )  { Passo=60; alertmail[j][5][0]=0; } else { Passo=65; alertmail[j][5][0]=1; }                  
      SetText("SymbolC_"+IntegerToString(j),DoubleToString(diff,1),x_axis+Passo,(j*z_axis)+y_axis,color_for_diff(diff) ,10);
      ObjectSetInteger(0,matrix,OBJPROP_COLOR,color_for_diff(diff));       

      string Matrix= IntegerToString(j)+","+IntegerToString(DaySearch()+1)+","+IntegerToString(0);      
      ObjectSetInteger(0,Matrix,OBJPROP_COLOR,clrBlack); 

      if(StringSubstr(TradePairs[j],0,3)==FirstCurr ||  StringSubstr(TradePairs[j],0,3)==SecondCurr)   { alertmail[j][2][0]=1; }else{ alertmail[j][2][0]=0; }      
      if(StringSubstr(TradePairs[j],3,3)==SecondCurr || StringSubstr(TradePairs[j],3,3)==FirstCurr )   { alertmail[j][3][1]=1; }else{ alertmail[j][3][1]=0; }      

            if(priceLow[j]<0){  
                                    alertmail[j][0][0]=1;
             MyColor = Red; 
             SetText("priceL"+IntegerToString(j),DoubleToStr(priceLow[j],2) ,x_axis+140,(j*z_axis)+y_axis,MyColor,10);}
            else if(priceLow[j]>1){ 
                                    alertmail[j][0][1]=1;            
             MyColor = Gold; 
             SetText("priceL"+IntegerToString(j),DoubleToStr(priceLow[j],2) ,x_axis+140,(j*z_axis)+y_axis,MyColor,10);}            
            else{
                                    alertmail[j][0][0]=0; alertmail[j][0][1]=0;            
             SetText("priceL"+IntegerToString(j),DoubleToStr(priceLow[j],2) ,x_axis+140,(j*z_axis)+y_axis,clrAqua,10);} 

            if(priceHigh[j]<0){  
                                     alertmail[j][1][0]=1;
             MyColor = Red; 
             SetText("priceH"+IntegerToString(j),DoubleToStr(priceHigh[j],2) ,x_axis+170,(j*z_axis)+y_axis,MyColor,10);}
            else if(priceHigh[j]>1){ 
                                     alertmail[j][1][1]=1;            
             MyColor = Gold; 
             SetText("priceH"+IntegerToString(j),DoubleToStr(priceHigh[j],2) ,x_axis+170,(j*z_axis)+y_axis,MyColor,10);}            
            else{
                                     alertmail[j][1][0]=0; alertmail[j][1][1]=0;            
             SetText("priceH"+IntegerToString(j),DoubleToStr(priceHigh[j],2) ,x_axis+170,(j*z_axis)+y_axis,clrAqua,10);}   

            long Spread=NormalizeDouble(MarketInfo(TradePairs[j], MODE_SPREAD),1);            

            int passo;

                 if (Spread <=10  )  { passo=14;}
            else if (Spread <=100 )  { passo=7; } 
            else if (Spread <=1000 ) { passo=0; }

            SetText("Spread_"+IntegerToString(j),IntegerToString(Spread)+"p",x_axis+250+passo,(j*z_axis)+y_axis,clrAqua,10);              

            int PassoBR ; if (BidRatio[j] <=10  )  { PassoBR =292;} else { PassoBR=285; }              
            SetText("BidRatio_"+IntegerToString(j),IntegerToString(DoubleToStr(BidRatio[j],1))+"%",x_axis+PassoBR,(j*z_axis)+y_axis,clrOrange,10); 

            GetAlert(j);      

    }

  }  

void GetAlert(int i)
  {

/*  
            int punteggio = alertmail[i][0][0]+alertmail[i][0][1]+      // Fibo L
                            alertmail[i][1][0]+alertmail[i][1][1]+      // Fibo H
                            alertmail[i][2][0]+alertmail[i][2][1]+      // Currency Quote Cur
                            alertmail[i][3][0]+alertmail[i][3][1]+      // Currency Base                            
                            Jolly[i]; 
*/            

           int punteggio = 0;

            MyColor = clrBlack;

            if(alertmail[i][5][0] >= 1){                                         //differenza
                                          switch(alertmail[i][4][0])             //roc
                                          {
                                           case 1: MyColor = clrGreen; punteggio=1; 
                                           if(ObjectGet("priceH"+IntegerToString(i),OBJPROP_COLOR) == clrRed ) punteggio=2;                                                                                   
                                           break;
                                          }} 
            if(alertmail[i][5][0] <= 0){                                         //differenza 
                                          switch(alertmail[i][4][0])             //roc
                                          {
                                           case 0: MyColor = clrRed; punteggio=1;
                                           if(ObjectGet("priceL"+IntegerToString(i),OBJPROP_COLOR) == clrRed ) punteggio=2;                                           
                                           break;
                                          }}                                                                                                                                                

            SetObjText("Sign"+IntegerToString(i),CharToStr(139+punteggio),x_axis+360,(i*z_axis)+y_axis,MyColor,9+punteggio);                                                                     

  } 

void  GetMatrix(int matrice, int posx, int posy)
{            
   string matrix;                       

     for(int xi=24; xi >= 1; xi--)       //candle 
      {          
         for(int xx=1; xx >= 0; xx--)   //bollinger 
          {  
           matrix= IntegerToString(matrice)+","+IntegerToString(xi)+","+IntegerToString(xx);    
           SetObjText(matrix,CharToStr(110),(xi*(9))+posx,posy,clrGray,8);
          }  
      }                                                                                                                                                                                                                                                                                                                       
}    

int WriteSuperMinMax(string MySymbol,int dux)
  {

   int    counted_bars=IndicatorCounted();

   double lowest=1000.0; double highest=0.0;

   for(int i=lookback+lastbar;i>lastbar+1;i--)
   {  
      double curLow0=iClose(MySymbol,timeframe,i-2);
      double curLow1=iClose(MySymbol,timeframe,i+1);
      double curLow2=iClose(MySymbol,timeframe,i);
      double curLow3=iClose(MySymbol,timeframe,i-1);
      double curLow4=iClose(MySymbol,timeframe,i-2);

      double curHigh0=iClose(MySymbol,timeframe,i+2);
      double curHigh1=iClose(MySymbol,timeframe,i+1);
      double curHigh2=iClose(MySymbol,timeframe,i);
      double curHigh3=iClose(MySymbol,timeframe,i-1);
      double curHigh4=iClose(MySymbol,timeframe,i-2);

      if(curLow2<=curLow1 && curLow2<=curLow1 && curLow2<=curLo

Показано первые 50% кода (символов: 26076)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
2 607,60₽ ≈ $31.87