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

cumulativedelta.mq5

Вы автор или правообладатель?

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

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

О программе

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

Поддерживается запись тиковых данных в CSV-файлы и загрузка исторических записей для расчёта. При активации режима загрузки истории индикатор восстанавливает ранее накопленные значения и перерисовывает бары на основе сохранённых тиков.

Опционально рассчитывается корреляционный коэффициент между накопительной дельтой и ценовыми изменениями OHLC, отображаемый в виде линии на том же графике. Набор переключателей позволяет управлять отображением, записью и загрузкой данных.

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

НастройкаОписание
showCumulative Показать накопительную дельту — Переключатель накопления дельта-значений. При отключении значения сбрасываются и не копятся между тиками.
recordTicks Запись тиков — Переключатель записи текущих тиковых данных (время, Bid, Ask, объём) в CSV-файл.
printHistory Загрузка истории тиков — Переключатель загрузки и чтения ранее сохранённых тиковых данных из CSV-файла при запуске индикатора.
dnColor Цвет медвежьего бара — Цвет гистограммных элементов, соответствующих медвежьим (нисходящим) барам.
upColor Цвет бычьего бара — Цвет гистограммных элементов, соответствующих бычьим (растущим) барам.
showCorr Показать корреляцию — Переключатель отображения линии корреляционного коэффициента на графике.
corrPeriod Период корреляции — Количество баров, используемых в качестве периода для расчёта корреляционного коэффициента.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 17

#import "user32.dll"
   int GetDC(int hwnd);
   int ReleaseDC(int hwnd,int hdc);
#import "gdi32.dll"
   color GetPixel(int hdc,int x,int y);
#import

extern bool    showCumulative = true;
extern bool    recordTicks = true;
extern bool    printHistory = true;
extern color   dnColor = Crimson;
extern color   upColor = Green;
extern bool    showCorr = false;
extern int     corrPeriod = 20;

double closed[],opened[],highed[],lowed[];

static double Up_Body_Green[];
static double Dn_Body_Red[];
static double EqBodyBuffer[];
static double Bg_Body_Black[];
static double Up_Wick_Green[];
static double Dn_Wick_Red[];
static double EqShadowBuffer[];
static double Bg_Wick_Black[];
static double Dn_Body_Green[];
static double Up_Body_Red[];
static double Dn_Wick_Green[];
static double Up_Wick_Red[];
static double correlation[];

double Curr_Bid;
double Prev_Bid;
double Curr_Ask;
double Prev_Ask;
double Curr_Vol;
double Prev_Vol;
datetime timestamp;
color bkg_color;
int handle=0;
bool firstTick=true;

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

int deinit() {

   if (handle==1){
      FileClose(handle);
   }
   return (0);
}

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

void initialize(){

         if (printHistory==true){
                  handle=FileOpen("Ticks_"+Symbol()+".csv", FILE_CSV|FILE_READ|FILE_WRITE,',');
                if (handle<0){
                  Print("Could Not Create/Open File "+GetLastError());
                  FileClose(handle);
                }
                if (handle==1){ 
                  Print("File Opened Successfully");        
                  FileSeek(handle,0,SEEK_SET);
                  if (!FileIsEnding(handle)) readData(); //Function to Read data line by line from file starting from the earliest record
                }
              }

             if (recordTicks==true && handle==0){
                handle=FileOpen("Ticks_"+Symbol()+".csv", FILE_CSV|FILE_READ|FILE_WRITE,',');
                if (handle<0){
                  Print("Could Not Create/Open File "+GetLastError());
                  FileClose(handle);
                }
                if (handle==1) Print("File Opened Successfully");
                FileSeek(handle, 0, SEEK_END);
              }

             if (recordTicks==true && handle==1){
                  FileSeek(handle, 0, SEEK_END);
              }

               Prev_Vol=iVolume(NULL,0,0);
               Curr_Vol=iVolume(NULL,0,0);
               firstTick=false;
      } 

void readData(){
   datetime time1 = StrToTime(FileReadString(handle));
   double bid1 = StrToDouble(FileReadString(handle)); 
   double ask1 = StrToDouble(FileReadString(handle));
   double volume1 = StrToDouble(FileReadString(handle));

   int i=0;
   while (time1<=Time[i]){
      i++;
   }

   opened[i]=0;   
   closed[i]=0;
   highed[i]=0;
   lowed[i]=0;

   datetime time2=time1;

     for (i; i>-1; i--){
            if (i>0){                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                  while ((time2<Time[i-1]) && !FileIsEnding(handle)){
                        time2 = StrToTime

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

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

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

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

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

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

Стоимость полного кода
1 011,50₽ ≈ $12.36