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

CurrencySlopeStrength

gary.baludasupercss.v.2.0.mq4
Вы автор или правообладатель?

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

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

О программе

CurrencySlopeStrength — это пользовательский индикатор для MetaTrader 4, рассчитывающий силу валютных трендов (Currency Slope Strength) по восьми основным валютам. В основе расчёта лежит метод тройной скользящей средней (TMA), нормализованный с помощью ATR, что позволяет оценить кратрейнд каждой валюты на выбранном таймфрейме.

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

Продукт включает систему визуальных сигналов: стрелки покупки и продажи при пересечении валютных значений, линии уровней пересечения, а также цветовую индикацию силы пересечений. Доступны всплывающие уведомления, email- и push-оповещения при выполнении заданных условий пересечения.

Настройки охватывают выбор валют, таймфреймов, цветов, ширины и стилей линий, параметры отображения таблиц и стрелок, а также параметры задержки обновления данных и тип оповещений.

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

НастройкаОписание
gen Общие настройки — Групповой параметр общих настроек
autoSymbols Автосимволы — Автоматическое формирование списка символов
symbolsToWeigh: CADCHF,NZDCAD,EURCHF,EURGBP, (symbolsToWeigh) Список символов — Список символов для расчёта весов валют
maxBars Максимум баров — Максимальное количество баров для расчёта
weighOnlySymbolOnChart Взвешивание по символу графика — Использовать только символ на графике для расчёта весов
nonPropFont Шрифт текста — Шрифт для отображения текста на графике
addSundayToMonday Добавить воскресенье к понедельнику — Учёт воскресных свечей как понедельних при расчёте на D1
showOnlySymbolOnChart Только символ на графике — Отображение только символа на графике
ind Настройки индикатора — Групповой параметр настроек индикатора
autoTimeFrame Автотаймфрейм — Автоматический выбор таймфреймов для таблиц
ind_tf Список таймфреймов — Список доступных таймфреймов для автовыбора
timeFrame: CSS & left column (timeFrame) Основной таймфрейм — Основной таймфрейм для CSS и левого столбца
extraTimeFrame: center column (extraTimeFrame) Дополнительный таймфрейм (центр) — Дополнительный таймфрейм для центрального столбца таблицы
extraTimeFrame2: right column (extraTimeFrame2) Дополнительный таймфрейм (правый) — Дополнительный таймфрейм для правого столбца таблицы
NoOfTimeFrames: num of TF to display (NoOfTimeFrames) Количество таймфреймов — Количество отображаемых таймфреймов в таблице (до 3)
ignoreFuture Игнорировать будущие свечи — Игнорирование будущих свечей при расчёте
showCrossAlerts Уведомления о пересечениях — Включение/отключение уведомлений о пересечениях
differenceThreshold Порог разницы — Порог разницы для отображения стрелок
showLevelCross Показать пересечение уровней — Отображение линий пересечения уровней
levelCrossValue Значение уровня пересечения — Значение уровня для пересечения
SlopeMAPeriod: CSSv3.8=21 ~ CSSSuper=7 (SlopeMAPeriod) Период MA наклона — Период скользящей средней для расчёта наклона
SlopeATRPeriod: CSSv3.8=100 ~ CSSSuper=50 (SlopeATRPeriod) Период ATR наклона — Период ATR для нормализации наклона
PopupAlert Всплывающие уведомления — Включение/отключение всплывающих уведомлений
EmailAlert Email-уведомления — Включение/отключение отправки email-уведомлений
PushAlert Push-уведомления — Включение/отключение push-уведомлений
cur Настройки валют — Групповой параметр настроек валют
USD Включить USD — Включение/отключение отображения и расчёта для валюты USD
EUR Включить EUR — Включение/отключение отображения и расчёта для валюты EUR
GBP Включить GBP — Включение/отключение отображения и расчёта для валюты GBP
CHF Включить CHF — Включение/отключение отображения и расчёта для валюты CHF
JPY Включить JPY — Включение/отключение отображения и расчёта для валюты JPY
AUD Включить AUD — Включение/отключение отображения и расчёта для валюты AUD
CAD Включить CAD — Включение/отключение отображения и расчёта для валюты CAD
NZD Включить NZD — Включение/отключение отображения и расчёта для валюты NZD
colour Цветовые настройки — Групповой параметр цветовых настроек
Color_USD Цвет линии USD — Цвет линии для валюты USD
Color_EUR Цвет линии EUR — Цвет линии для валюты EUR
Color_GBP Цвет линии GBP — Цвет линии для валюты GBP
Color_CHF Цвет линии CHF — Цвет линии для валюты CHF
Color_JPY Цвет линии JPY — Цвет линии для валюты JPY
Color_AUD Цвет линии AUD — Цвет линии для валюты AUD
Color_CAD Цвет линии CAD — Цвет линии для валюты CAD
Color_NZD Цвет линии NZD — Цвет линии для валюты NZD
line_width_USD Толщина линии USD — Толщина линии для валюты USD
line_style_USD Стиль линии USD — Стиль линии для валюты USD
line_width_EUR Толщина линии EUR — Толщина линии для валюты EUR
line_style_EUR Стиль линии EUR — Стиль линии для валюты EUR
line_width_GBP Толщина линии GBP — Толщина линии для валюты GBP
line_style_GBP Стиль линии GBP — Стиль линии для валюты GBP
line_width_JPY Толщина линии JPY — Толщина линии для валюты JPY
line_style_JPY Стиль линии JPY — Стиль линии для валюты JPY
line_width_AUD Толщина линии AUD — Толщина линии для валюты AUD
line_style_AUD Стиль линии AUD — Стиль линии для валюты AUD
line_width_CAD Толщина линии CAD — Толщина линии для валюты CAD
line_style_CAD Стиль линии CAD — Стиль линии для валюты CAD
line_width_NZD Толщина линии NZD — Толщина линии для валюты NZD
line_style_NZD Стиль линии NZD — Стиль линии для валюты NZD
line_width_CHF Толщина линии CHF — Толщина линии для валюты CHF
line_style_CHF Стиль линии CHF — Стиль линии для валюты CHF
colorWeakCross Цвет слабого пересечения — Цвет слабого пересечения
colorNormalCross Цвет обычного пересечения — Цвет обычного пересечения
colorStrongCross Цвет сильного пересечения — Цвет сильного пересечения
colorDifferenceUp Цвет разницы вверх — Цвет при положительной разнице валютных значений
colorDifferenceDn Цвет разницы вниз — Цвет при отрицательной разнице валютных значений
colorDifferenceLo Цвет разницы низкая — Цвет при разнице ниже порога
colorTimeframe Цвет таймфрейма — Цвет текста таймфрейма в таблице
colorLevelHigh Цвет уровня высокий — Цвет маркера пересечения верхнего уровня
colorLevelLow Цвет уровня низкий — Цвет маркера пересечения нижнего уровня
disp Настройки отображения — Групповой параметр настроек отображения
displayTextSize Размер текста — Размер шрифта текста на графике
horizontalOffset Горизонтальное смещение — Горизонтальное смещение элементов таблицы
verticalOffset Вертикальное смещение — Вертикальное смещение элементов таблицы
tableVertOffset: 3rd table (tableVertOffset) Вертикальное смещение таблицы — Вертикальное смещение третьей таблицы
horizontalShift: columns (horizontalShift) Сдвиг столбцов — Горизонтальный шаг столбцов таблицы
verticalShift: rows (verticalShift) Сдвиг строк — Вертикальный шаг строк таблицы
gen2 Настройки стрелок — Групповой параметр настроек отображения стрелок
showArrows: set showOnlySymbolOnChart to true (showArrows) Показать стрелки — Отображение стрелок покупки и продажи
BuyArrowColor Цвет стрелки покупки — Цвет стрелки покупки на графике
BuyArrowFontSize Размер шрифта стрелки покупки — Размер шрифта стрелки покупки
SellArrowColor Цвет стрелки продажи — Цвет стрелки продажи на графике
SellArrowFontSize Размер шрифта стрелки продажи — Размер шрифта стрелки продажи
rede Настройки задержки — Групповой параметр настроек задержки чтения
EveryTickMode: set to false if viewing full css tables w/3 TFs (EveryTickMode) Обновление каждый тик — Режим обновления данных каждый тик или по таймеру
ReadEveryNewBar: reads every new bar even if ReadEveryXSeconds hasn't expired (ReadEveryNewBar) Читать при новом баре — Чтение данных при каждом новом баре
ReadEveryXSeconds: set EveryTickMode to false (ReadEveryXSeconds) Интервал чтения (секунды) — Интервал чтения данных в секундах (при отключённом EveryTickMode)
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 8

#define version        "v3.8"
#property strict

#define CURRENCYCOUNT  8

extern string  gen               = "----General inputs----"; //----
extern bool    autoSymbols       = false;
extern string  symbolsToWeigh    = "AUDCAD,AUDCHF,AUDJPY,AUDNZD,AUDUSD,CADJPY,CHFJPY,EURAUD,EURCAD,EURJPY,EURNZD,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDCHF,NZDJPY,NZDUSD,USDCAD,USDCHF,USDJPY"; //symbolsToWeigh: CADCHF,NZDCAD,EURCHF,EURGBP,
extern int     maxBars           = 200;
extern bool    weighOnlySymbolOnChart = true;
extern string  nonPropFont       = "Lucida Console";
extern bool    addSundayToMonday = true;
extern bool    showOnlySymbolOnChart = true;

extern string  ind               = "----Indicator inputs----"; //----
extern bool    autoTimeFrame     = true;
extern string  ind_tf            = "timeFrame M1,M5,M15,M30,H1,H4,D1,W1,MN"; //----
extern string  timeFrame         = "H4"; //timeFrame: CSS & left column 
extern string  extraTimeFrame    = "D1"; //extraTimeFrame: center column
extern string  extraTimeFrame2   = "H1"; //extraTimeFrame2: right column 
extern int     NoOfTimeFrames    = 3;    //NoOfTimeFrames: num of TF to display
extern bool    ignoreFuture      = true;
extern bool    showCrossAlerts   = true;
extern double  differenceThreshold = 0.0; 
extern bool    showLevelCross    = true;
extern double  levelCrossValue   = 2.0; 
extern int     SlopeMAPeriod     = 7; //SlopeMAPeriod: CSSv3.8=21 ~ CSSSuper=7
extern int     SlopeATRPeriod    = 50; //SlopeATRPeriod: CSSv3.8=100 ~ CSSSuper=50
extern bool    PopupAlert        = true; 
extern bool    EmailAlert        = true;
extern bool    PushAlert         = true;

extern string  cur               = "----Currency inputs----"; //----
extern bool    USD               = true;   
extern bool    EUR               = true;   
extern bool    GBP               = true;
extern bool    CHF               = true;
extern bool    JPY               = true;
extern bool    AUD               = true;
extern bool    CAD               = true;
extern bool    NZD               = true;

extern string  colour="----Colo(u)r inputs----"; //----
extern color   Color_USD         = clrRed;
extern color   Color_EUR         = clrDeepSkyBlue;
extern color   Color_GBP         = clrRoyalBlue;
extern color   Color_CHF         = clrPaleTurquoise;
extern color   Color_JPY         = clrGold;
extern color   Color_AUD         = clrDarkOrange;
extern color   Color_CAD         = clrPink;
extern color   Color_NZD         = clrTan;
extern int     line_width_USD    = 3;
extern int     line_style_USD    = 0;
extern int     line_width_EUR    = 3;
extern int     line_style_EUR    = 0;
extern int     line_width_GBP    = 3;
extern int     line_style_GBP    = 0;
extern int     line_width_JPY    = 3;
extern int     line_style_JPY    = 0;
extern int     line_width_AUD    = 3;
extern int     line_style_AUD    = 0;
extern int     line_width_CAD    = 3;
extern int     line_style_CAD    = 0;
extern int     line_width_NZD    = 3;
extern int     line_style_NZD    = 0;
extern int     line_width_CHF    = 3;
extern int     line_style_CHF    = 0;
extern color   colorWeakCross    = clrGold;
extern color   colorNormalCross  = clrGold;
extern color   colorStrongCross  = clrGold;
extern color   colorDifferenceUp = 0x303000;
extern color   colorDifferenceDn = 0x000030;
extern color   colorDifferenceLo = 0x005454;
extern color   colorTimeframe    = clrWhite;
extern color   colorLevelHigh    = clrLimeGreen;
extern color   colorLevelLow     = clrCrimson;

extern string  disp              = "----Display Inputs----"; //----
extern int     displayTextSize   = 11;
extern int     horizontalOffset  = 10;  
extern int     verticalOffset    = 10; 
extern int     tableVertOffset   = 170; //tableVertOffset: 3rd table  
extern int     horizontalShift   = 20; //horizontalShift: columns
extern int     verticalShift     = 15; //verticalShift: rows

extern string  gen2              = "----Arrow Display----"; //----
extern bool    showArrows        = true; //showArrows: set showOnlySymbolOnChart to true
extern color   BuyArrowColor     = clrDarkGreen;
extern int     BuyArrowFontSize  = 22;               
extern color   SellArrowColor    = clrMaroon;
extern int     SellArrowFontSize = 22;

int      ATRPeriodArrows=20; 
double   ATRMultiplierArrows=1.0;
bool     OnlyDrawArrowsOnNewBar=true;
datetime drawArrowTime=0; 
bool     BuyArrowActive=false, SellArrowActive=false;
int      leftBarPrev=0, rightBarPrev=0;

extern string  rede              = "----Read Delay----"; //----
extern bool    EveryTickMode     = true; //EveryTickMode: set to false if viewing full css tables w/3 TFs
extern bool    ReadEveryNewBar   = true; //ReadEveryNewBar: reads every new bar even if ReadEveryXSeconds hasn't expired
extern int     ReadEveryXSeconds = 10; //ReadEveryXSeconds: set EveryTickMode to false

datetime NextReadTime=0, lastBarTime=0;

string   indicatorName="CurrencySlopeStrength";
string   shortName;
int      userTimeFrame;
int      userExtraTimeFrame;
int      userExtraTimeFrame2;
string   almostUniqueIndex;
bool     sundayCandlesDetected;
string   objectName;
int      windex;
int      size;
int      digits=0;
string   ObjectSuffix="_SCSS";
string   ObjectSuffix2="_objdel";
bool     IsInit;

double   arrUSD[];
double   arrEUR[];
double   arrGBP[];
double   arrJPY[];
double   arrAUD[];
double   arrCAD[];
double   arrNZD[];
double   arrCHF[];

int      symbolCount;
string   symbolNames[];
string   currencyNames[CURRENCYCOUNT]={ "USD","EUR","GBP","JPY","AUD","CAD","NZD","CHF" };
double   currencyValues[CURRENCYCOUNT];      // Currency slope strength
double   currencyValuesPrior[CURRENCYCOUNT]; // Currency slope strength prior bar
double   currencyOccurrences[CURRENCYCOUNT]; // Holds the number of occurrences of each currency in symbols
int      line_width[CURRENCYCOUNT];
int      line_style[CURRENCYCOUNT];
color    currencyColors[CURRENCYCOUNT];

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

void initSymbols()
  {
   int i;

   string symbolExtraChars=StringSubstrOld(Symbol(),6,4);

   if(weighOnlySymbolOnChart)
     {
      symbolsToWeigh=StringSubstrOld(Symbol(),0,6);
     }

   symbolsToWeigh = StringTrimLeft(symbolsToWeigh);
   symbolsToWeigh = StringTrimRight(symbolsToWeigh);

   if(StringSubstrOld(symbolsToWeigh,StringLen(symbolsToWeigh)-1)!=",")
     {
      symbolsToWeigh=StringConcatenate(symbolsToWeigh,",");
     }

   if(autoSymbols)
     {
      createSymbolNamesArray();

      if(weighOnlySymbolOnChart)
        {
         ArrayResize(symbolNames,1);
         symbolNames[0]=Symbol();
        }
     }
   else
     {

      i=StringFind(symbolsToWeigh,",");
      while(i!=-1)
        {
         size=ArraySize(symbolNames);
         string newSymbol=StringConcatenate(StringSubstrOld(symbolsToWeigh,0,i),symbolExtraChars);

         ArrayResize(symbolNames,size+1);

         symbolNames[size]=newSymbol;

         symbolsToWeigh=StringSubstrOld(symbolsToWeigh,i+1);
         i=StringFind(symbolsToWeigh,",");
        }
     }

   if(showOnlySymbolOnChart)
     {
      symbolCount=ArraySize(symbolNames);
      string tempNames[];
      for(i=0; i<symbolCount; i++)
        {
         for(int j=0; j<CURRENCYCOUNT; j++)
           {
            if(StringFind(Symbol(),currencyNames[j])==-1)
              {
               continue;
              }
            if(StringFind(symbolNames[i],currencyNames[j])!=-1)
              {
               size=ArraySize(tempNames);
               ArrayResize(tempNames,size+1);
               tempNames[size]=symbolNames[i];
               break;
              }
           }
        }
      for(i=0; i<ArraySize(tempNames); i++)
        {
         ArrayResize(symbolNames,i+1);
         symbolNames[i]=tempNames[i];
        }
     }
   else
     {

      string symbols = "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 tempSymbols[];
      int    count=0;

      for(i=0;i<ArraySize(symbolNames);i++)  
        {
         if(StringFind(symbols, StringSubstrOld(symbolNames[i],0,6)) != -1)
           {
            ArrayResize(tempSymbols,count+1);
            tempSymbols[count] = symbolNames[i];
            count++; 
           }
        }

      ArrayResize(symbolNames, ArraySize(tempSymbols));
      ArrayCopy(symbolNames,tempSymbols,0,0,WHOLE_ARRAY);

     }

   symbolCount=ArraySize(symbolNames);

   for(i=0; i<symbolCount; i++)
     {

      int currencyIndex=getCurrencyIndex(StringSubstrOld(symbolNames[i],0,3));
      currencyOccurrences[currencyIndex]++;
      currencyIndex=getCurrencyIndex(StringSubstrOld(symbolNames[i],3,3));
      currencyOccurrences[currencyIndex]++;
     }

   if(!autoTimeFrame)
     {
      userTimeFrame = StrToTF(timeFrame); //css & left column
      userExtraTimeFrame = StrToTF(extraTimeFrame); //center column
      userExtraTimeFrame2 = StrToTF(extraTimeFrame2); //right column
     }
   else
     {

      userTimeFrame=Period(); 

      if( userTimeFrame == PERIOD_M1 ) userExtraTimeFrame = PERIOD_M5; 
      else if( userTimeFrame == PERIOD_M5 )  userExtraTimeFrame = PERIOD_M15;
      else if( userTimeFrame == PERIOD_M15 ) userExtraTimeFrame = PERIOD_M30;
      else if( userTimeFrame == PERIOD_M30 ) userExtraTimeFrame = PERIOD_H1;
      else if( userTimeFrame == PERIOD_H1 )  userExtraTimeFrame = PERIOD_H4;
      else if( userTimeFrame == PERIOD_H4 )  userExtraTimeFrame = PERIOD_D1;
      else if( userTimeFrame == PERIOD_D1 )  userExtraTimeFrame = PERIOD_W1;
      else if( userTimeFrame == PERIOD_W1 )  userExtraTimeFrame = PERIOD_MN1;
      else if( userTimeFrame == PERIOD_MN1 )  userExtraTimeFrame = PERIOD_MN1;

      if( userTimeFrame == PERIOD_M1 ) userExtraTimeFrame2 = PERIOD_M1; 
      else if( userTimeFrame == PERIOD_M5 )  userExtraTimeFrame2 = PERIOD_M1;
      else if( userTimeFrame == PERIOD_M15 ) userExtraTimeFrame2 = PERIOD_M5;
      else if( userTimeFrame == PERIOD_M30 ) userExtraTimeFrame2 = PERIOD_M15;
      else if( userTimeFrame == PERIOD_H1 )  userExtraTimeFrame2 = PERIOD_M30;
      else if( userTimeFrame == PERIOD_H4 )  userExtraTimeFrame2 = PERIOD_H1;
      else if( userTimeFrame == PERIOD_D1 )  userExtraTimeFrame2 = PERIOD_H4;
      else if( userTimeFrame == PERIOD_W1 )  userExtraTimeFrame2 = PERIOD_D1;
      else if( userTimeFrame == PERIOD_MN1 )  userExtraTimeFrame2 = PERIOD_W1;      
     }
  }

int getCurrencyIndex(string currency)
  {
   for(int i=0; i<CURRENCYCOUNT; i++)
     {
      if(currencyNames[i]==currency)
        {
         return(i);
        }
     }
   return (-1);
  }

void createSymbolNamesArray()
  {
   int hFileName=FileOpenHistory("symbols.raw",FILE_BIN|FILE_READ);
   int recordCount=int(FileSize(hFileName)/1936);
   int counter=0;
   for(int i=0; i<recordCount; i++)
     {
      string tempSymbol=StringTrimLeft(StringTrimRight(FileReadString(hFileName,12)));
      if(MarketInfo(tempSymbol,MODE_BID)>0 && MarketInfo(tempSymbol,MODE_TRADEALLOWED))
        {
         ArrayResize(symbolNames,counter+1);
         symbolNames[counter]=tempSymbol;
         counter++;
        }
      FileSeek(hFileName,1924,SEEK_CUR);
     }
   FileClose(hFileName);

  }

string GetTimeframeString(int tf)
  {
   string result;
   switch(tf)
     {
      case PERIOD_M1:   result = "M1";    break;
      case PERIOD_M5:   result = "M5";    break;
      case PERIOD_M15:  result = "M15";   break;
      case PERIOD_M30:  result = "M30";   break;
      case PERIOD_H1:   result = "H1";    break;
      case PERIOD_H4:   result = "H4";    break;
      case PERIOD_D1:   result = "D1";    break;
      case PERIOD_W1:   result = "W1";    break;
      case PERIOD_MN1:  result = "MN1";   break;
      default: result="SRITSOD";
     }
   return ( result );
  }

void OnDeinit(const int reason)
{

   for(int i=ObjectsTotal()-1;i>=0;i--)
   {
      if(StringFind(ObjectName(i),ObjectSuffix,0)>0)
      {
         ObjectDelete(ObjectName(i));
      }
   }

}//OnDeinit(const int reason)

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

double getSlope(string symbol,int tf,int shift)
  {
   double dblTma,dblPrev;
   int shiftWithoutSunday=shift;
   if(addSundayToMonday && sundayCandlesDetected && tf==PERIOD_D1)
     {
      if(TimeDayOfWeek(iTime(symbol,PERIOD_D1,shift))==0) shiftWithoutSunday++;
     }
   double atr=iATR(symbol,tf,SlopeATRPeriod,shiftWithoutSunday+10)/10;
   double gadblSlope=0.0;
   if(atr!=0)
     {
      if(ignoreFuture)
        {

         dblTma=iMA(symbol,tf,SlopeMAPeriod,0,MODE_LWMA,PRICE_CLOSE,shiftWithoutSunday);
         dblPrev=(iMA(symbol,tf,SlopeMAPeriod,0,MODE_LWMA,PRICE_CLOSE,shiftWithoutSunday+1)*231+iClose(symbol,tf,shiftWithoutSunday)*20)/251;
        }
      else
        {
         dblTma=calcTma(symbol,tf,shiftWithoutSunday);
         dblPrev=calcTma(symbol,tf,shiftWithoutSunday+1);
        }
      gadblSlope=(dblTma-dblPrev)/atr;
     }

   return ( gadblSlope );

  }

double calcTma(string symbol,int tf,int shift)
  {
   double dblSum  = iClose( symbol, tf, shift ) * 21;
   double dblSumw = 21;
   int jnx,knx;

   for(jnx=1,knx=20; jnx<=20; jnx++,knx--)
     {
      dblSum  += iClose(symbol, tf, shift + jnx) * knx;
      dblSumw += knx;

      if(jnx<=shift)
        {
         dblSum  += iClose(symbol, tf, shift - jnx) * knx;
         dblSumw += knx;
        }
     }

   return ( dblSum / dblSumw );
  }

void calcCSS(int tf,int shift)
  {
   int i;

   for(i=0; i<symbolCount; i++)
     {
      double slope=getSlope(symbolNames[i],tf,shift);
      currencyValues[getCurrencyIndex(StringSubstrOld(symbolNames[i], 0, 3))] += slope;
      currencyValues[getCurrencyIndex(StringSubstrOld(symbolNames[i], 3, 3))] -= slope;
     }
   for(i=0; i<CURRENCYCOUNT; i++)
     {

      if(currencyOccurrences[i]>0) currencyValues[i]/=currencyOccurrences[i]; else currencyValues[i]=0;
     }
  }

void ShowCurrencyTable(int tf, int column, int rightBar2)
{
   int    i=0;
   int    tempValue, tempValue_2;
   string showText, showText_2;
   double slope=0, slope_2=0;
   color  showColor; 

   static datetime tLastAlert[8];
   static datetime tLastAlert_1[8];
   static datetime tLastAlert_2[8];
   static datetime tLastAlert_3[8];
   static datetime tLastAlert_4[8];

   static datetime tLastAlert_3a, tLastAlert_3b;
   static datetime tLastAlert_3c, tLastAlert_3d;
   static datetime tLastAlert_3e, tLastAlert_3f;
   static datetime tLastAlert_3g, tLastAlert_3h; 
   static datetime tLastAlert_3i, tLastAlert_3j;
   static datetime tLastAlert_3k, tLastAlert_3l;

   bool OkToSendAlerts = (!IsInit && rightBar2 == 0);  

   double Currency_Values[CURRENCYCOUNT][3]; //first time frame
   double tempCurrencyValues[CURRENCYCOUNT][3]; //second time frame
   double tempCurrencyValues2[CURRENCYCOUNT][3]; //third time frame
   ArrayInitialize(Currency_Values,0.0);
   ArrayInitialize(tempCurrencyValues,0.0);
   ArrayInitialize(tempCurrencyValues2,0.0);

   if(column == 1)
   {
      for(i=0; i<CURRENCYCOUNT; i++)
      {
         Currency_Values[i][0] = currencyValues[i];
         Currency_Values[i][1] = NormalizeDouble(currencyValuesPrior[i], 2);
         Currency_Values[i][2] = i;
      }

   }//if(column == 1)

   if(column == 2)
   {
      for(i=0; i<symbolCount; i++)
      {
         slope=getSlope(symbolNames[i],tf,rightBar2);
         slope_2=getSlope(symbolNames[i],tf,rightBar2+1);

         tempCurrencyValues[getCurrencyIndex(StringSubstrOld(symbolNames[i], 0, 3))][0] += slope;
         tempCurrencyValues[getCurrencyIndex(StringSubstrOld(symbolNames[i], 0, 3))][1] += slope_2;
         tempCurrencyValues[getCurrencyIndex(StringSubstrOld(symbolNames[i], 3, 3))][0] -= slope;
         tempCurrencyValues[getCurrencyIndex(StringSubstrOld(symbolNames[i], 3, 3))][1] -= slope_2;
      }
      for(i=0; i<CURRENCYCOUNT; i++)
      {         
         tempCurrencyValues[i][2]=i;

         if(currencyOccurrences[i]>0) tempCurrencyValues[i][0]/=currencyOccurrences[i]; else tempCurrencyValues[i][0]=0;
         if(currencyOccurrences[i]>0) tempCurrencyValues[i][1]/=currencyOccurrences[i]; else tempCurrencyValues[i][1]=0;
      }

   }//if(column == 2)

   if(column == 3)
   {
      for(i=0; i<symbolCount; i++)
      {
         slope=getSlope(symbolNames[i],userExtraTimeFrame2,rightBar2);
         slope_2=getSlope(symbolNames[i],userExtraTimeFrame2,rightBar2+1);

         tempCurrencyValues2[getCurrencyIndex(StringSubstrOld(symbolNames[i], 0, 3))][0] += slope;
         tempCurrencyValues2[getCurrencyIndex(StringSubstrOld(symbolNames[i], 0, 3))][1] += slope_2;
         tempCurrencyValues2[getCurrencyIndex(StringSubstrOld(symbolNames[i], 3, 3))][0] -= slope;
         tempCurrencyValues2[getCurrencyIndex(StringSubstrOld(symbolNames[i], 3, 3))][1] -= slope_2;
      }
      for(i=0; i<CURRENCYCOUNT; i++)
      {
         tempCurrencyValues2[i][2]=i;

         if(currencyOccurrences[i]>0) tempCurrencyValues2[i][0]/=currencyOccurrences[i]; else tempCurrencyValues2[i][0]=0;
         if(currencyOccurrences[i]>0) tempCurrencyValues2[i][1]/=currencyOccurrences[i]; else tempCurrencyValues2[i][1]=0;
      }

   }//if(column == 3)

   if(showOnlySymbolOnChart)
   {

      if(column == 1)
      {
         objectName=almostUniqueIndex+"_css_obj_column1_tf"+ObjectSuffix;
         if(ObjectFind(objectName)==-1)
         {
            if(ObjectCreate(objectName,OBJ_LABEL,windex,0,0))
            {
               ObjectSet(objectName,OBJPROP_CORNER,1);
               ObjectSet(objectName,OBJPROP_XDISTANCE,horizontalOffset+10+horizontalShift*6);
               ObjectSet(objectName,OBJPROP_YDISTANCE,verticalOffset);
               ObjectSet(objectName,OBJPROP_HIDDEN,true);
            }
         }
         ObjectSetText(objectName,TFToString(userTimeFrame),displayTextSize,nonPropFont,colorTimeframe);

      }//if(column == 1)

      if(column ==2)
      {
         objectName=almostUniqueIndex+"_css_obj_column2_tf"+ObjectSuffix;
         if(ObjectFind(objectName)==-1)
         {
            if(ObjectCreate(objectName,OBJ_LABEL,windex,0,0))
            {
               ObjectSet(objectName,OBJPROP_CORNER,1);
               ObjectSet(objectName,OBJPROP_XDISTANCE,horizontalOffset+10+horizontalShift*3);
               ObjectSet(objectName,OBJPROP_YDISTANCE,verticalOffset);
               ObjectSet(objectName,OBJPROP_HIDDEN,true);
            }
         }
         ObjectSetText(objectName,TFToString(userExtraTimeFrame),displayTextSize,nonPropFont,colorTimeframe);

      }//if(column == 2)      

      if(column == 3)
      {
         objectName=almostUniqueIndex+"_css_obj_column3_tf"+ObjectSuffix;
         if(ObjectFind(objectName)==-1)
         {
            if(ObjectCreate(objectName,OBJ_LABEL,windex,0,0))
            {
               ObjectSet(objectName,OBJPROP_CORNER,1);
               ObjectSet(objectName,OBJPROP_XDISTANCE,horizontalOffset+10);
               ObjectSet(objectName,OBJPROP_YDISTANCE,verticalOffset);
               ObjectSet(objectName,OBJPROP_HIDDEN,true);
            }
         }
         ObjectSetText(objectName,TFToString(userExtraTimeFrame2),displayTextSize,nonPropFont,colorTimeframe);

      }//if(column == 3)  

      double Curr1Val=0, Curr1ValPrior=0, Curr2Val=0, Curr2ValPrior=0;
      string Curr1, Curr2;

      int index=getCurrencyIndex(StringSubstrOld(Symbol(),0,3));
      int index2=getCurrencyIndex(StringSubstrOld(Symbol(),3,3));

      Curr1=currencyNames[index];
      Curr1Val=currencyValues[index];
      Curr1ValPrior=currencyValuesPrior[index];

      Curr2=currencyNames[index2];
      Curr2Val=currencyValues[index2];
      Curr2ValPrior=currencyValuesPrior[index2];

      digits = GetDigits(Curr1+Curr2);

      if(column == 1)
      {
         objectName=almostUniqueIndex+"_css_obj_column1_value1"+ObjectSuffix;
         if(ObjectFind(objectName)==-1)
         {
            if(ObjectCreate(objectName,OBJ_LABEL,windex,0,0))
            {
               ObjectSet(objectName,OBJPROP_CORNER,1);
               ObjectSet(objectName,OBJPROP_XDISTANCE,horizontalOffset+horizontalShift*6);
               ObjectSet(objectName,OBJPROP_YDISTANCE,verticalOffset+verticalShift*1.5);
               ObjectSet(objectName,OBJPROP_HIDDEN,true);
            }
         }
         showText=RightAlign(DoubleToStr

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

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

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

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

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

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

Стоимость полного кода
4 753,10₽ ≈ $58.09