//+------------------------------------------------------------------+ //| SPC.mq5 | //| Azotskiy Aktiniy ICQ:695710750 | //| https://login.mql5.com/ru/users/aktiniy | //+------------------------------------------------------------------+ #property copyright "Azotskiy Aktiniy ICQ:695710750" #property link "https://login.mql5.com/ru/users/aktiniy" #property version "1.00" #property indicator_separate_window #property indicator_buffers 11 #property indicator_plots 4 //--- #property indicator_label1 "Shadow" #property indicator_type1 DRAW_COLOR_HISTOGRAM2 #property indicator_color1 clrRed,clrBlue,clrGray #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- #property indicator_label2 "Open" #property indicator_type2 DRAW_LINE #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- #property indicator_label3 "Close" #property indicator_type3 DRAW_LINE #property indicator_color3 clrBlue #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- #property indicator_label4 "VWMA" #property indicator_type4 DRAW_LINE #property indicator_color4 clrMagenta #property indicator_style4 STYLE_SOLID #property indicator_width4 1 //--- загружаем ресурсные файлы #resource "\\Images\\for_SPC\\b0.bmp"; #resource "\\Images\\for_SPC\\b1.bmp"; #resource "\\Images\\for_SPC\\b2.bmp"; #resource "\\Images\\for_SPC\\b3.bmp"; #resource "\\Images\\for_SPC\\b4.bmp"; #resource "\\Images\\for_SPC\\b5.bmp"; #resource "\\Images\\for_SPC\\b6.bmp"; #resource "\\Images\\for_SPC\\b7.bmp"; #resource "\\Images\\for_SPC\\b8.bmp"; #resource "\\Images\\for_SPC\\b9.bmp"; #resource "\\Images\\for_SPC\\b10.bmp"; #resource "\\Images\\for_SPC\\b11.bmp"; #resource "\\Images\\for_SPC\\b12.bmp"; #resource "\\Images\\for_SPC\\b13.bmp"; #resource "\\Images\\for_SPC\\b14.bmp"; #resource "\\Images\\for_SPC\\b15.bmp"; #resource "\\Images\\for_SPC\\b16.bmp"; #resource "\\Images\\for_SPC\\b17.bmp"; #resource "\\Images\\for_SPC\\b18.bmp"; #resource "\\Images\\for_SPC\\b19.bmp"; #resource "\\Images\\for_SPC\\b20.bmp"; #resource "\\Images\\for_SPC\\b21.bmp"; #resource "\\Images\\for_SPC\\b22.bmp"; #resource "\\Images\\for_SPC\\b23.bmp"; #resource "\\Images\\for_SPC\\b24.bmp"; #resource "\\Images\\for_SPC\\b25.bmp"; #resource "\\Images\\for_SPC\\b26.bmp"; #resource "\\Images\\for_SPC\\b27.bmp"; #resource "\\Images\\for_SPC\\b28.bmp"; #resource "\\Images\\for_SPC\\b29.bmp"; #resource "\\Images\\for_SPC\\b30.bmp"; #resource "\\Images\\for_SPC\\b31.bmp"; #resource "\\Images\\for_SPC\\b32.bmp"; #resource "\\Images\\for_SPC\\b33.bmp"; #resource "\\Images\\for_SPC\\b34.bmp"; #resource "\\Images\\for_SPC\\b35.bmp"; #resource "\\Images\\for_SPC\\b36.bmp"; #resource "\\Images\\for_SPC\\b37.bmp"; #resource "\\Images\\for_SPC\\b38.bmp"; #resource "\\Images\\for_SPC\\b39.bmp"; #resource "\\Images\\for_SPC\\b40.bmp"; #resource "\\Images\\for_SPC\\b41.bmp"; #resource "\\Images\\for_SPC\\b42.bmp"; #resource "\\Images\\for_SPC\\b43.bmp"; #resource "\\Images\\for_SPC\\b44.bmp"; #resource "\\Images\\for_SPC\\b45.bmp"; #resource "\\Images\\for_SPC\\b46.bmp"; #resource "\\Images\\for_SPC\\b47.bmp"; #resource "\\Images\\for_SPC\\b48.bmp"; #resource "\\Images\\for_SPC\\b49.bmp"; #resource "\\Images\\for_SPC\\b50.bmp"; #resource "\\Images\\for_SPC\\b51.bmp"; #resource "\\Images\\for_SPC\\b52.bmp"; #resource "\\Images\\for_SPC\\b53.bmp"; #resource "\\Images\\for_SPC\\b54.bmp"; #resource "\\Images\\for_SPC\\b55.bmp"; #resource "\\Images\\for_SPC\\b56.bmp"; #resource "\\Images\\for_SPC\\b57.bmp"; #resource "\\Images\\for_SPC\\b58.bmp"; #resource "\\Images\\for_SPC\\b59.bmp"; #resource "\\Images\\for_SPC\\b60.bmp"; #resource "\\Images\\for_SPC\\b61.bmp"; #resource "\\Images\\for_SPC\\b62.bmp"; #resource "\\Images\\for_SPC\\b63.bmp"; #resource "\\Images\\for_SPC\\b64.bmp"; #resource "\\Images\\for_SPC\\b65.bmp"; #resource "\\Images\\for_SPC\\b66.bmp"; #resource "\\Images\\for_SPC\\b67.bmp"; #resource "\\Images\\for_SPC\\b68.bmp"; #resource "\\Images\\for_SPC\\b69.bmp"; #resource "\\Images\\for_SPC\\b70.bmp"; #resource "\\Images\\for_SPC\\b71.bmp"; #resource "\\Images\\for_SPC\\b72.bmp"; #resource "\\Images\\for_SPC\\b73.bmp"; #resource "\\Images\\for_SPC\\b74.bmp"; #resource "\\Images\\for_SPC\\b75.bmp"; #resource "\\Images\\for_SPC\\b76.bmp"; #resource "\\Images\\for_SPC\\b77.bmp"; #resource "\\Images\\for_SPC\\b78.bmp"; #resource "\\Images\\for_SPC\\b79.bmp"; #resource "\\Images\\for_SPC\\b80.bmp"; #resource "\\Images\\for_SPC\\b81.bmp"; #resource "\\Images\\for_SPC\\b82.bmp"; #resource "\\Images\\for_SPC\\b83.bmp"; #resource "\\Images\\for_SPC\\b84.bmp"; #resource "\\Images\\for_SPC\\b85.bmp"; #resource "\\Images\\for_SPC\\b86.bmp"; #resource "\\Images\\for_SPC\\b87.bmp"; #resource "\\Images\\for_SPC\\b88.bmp"; #resource "\\Images\\for_SPC\\b89.bmp"; #resource "\\Images\\for_SPC\\b90.bmp"; #resource "\\Images\\for_SPC\\b91.bmp"; #resource "\\Images\\for_SPC\\b92.bmp"; #resource "\\Images\\for_SPC\\b93.bmp"; #resource "\\Images\\for_SPC\\b94.bmp"; #resource "\\Images\\for_SPC\\b95.bmp"; #resource "\\Images\\for_SPC\\b96.bmp"; #resource "\\Images\\for_SPC\\b97.bmp"; #resource "\\Images\\for_SPC\\b98.bmp"; #resource "\\Images\\for_SPC\\b99.bmp"; #resource "\\Images\\for_SPC\\b100.bmp"; #resource "\\Images\\for_SPC\\b101.bmp"; #resource "\\Images\\for_SPC\\b102.bmp"; #resource "\\Images\\for_SPC\\b103.bmp"; #resource "\\Images\\for_SPC\\b104.bmp"; #resource "\\Images\\for_SPC\\b105.bmp"; #resource "\\Images\\for_SPC\\b106.bmp"; #resource "\\Images\\for_SPC\\b107.bmp"; #resource "\\Images\\for_SPC\\b108.bmp"; #resource "\\Images\\for_SPC\\b109.bmp"; #resource "\\Images\\for_SPC\\b110.bmp"; #resource "\\Images\\for_SPC\\b111.bmp"; #resource "\\Images\\for_SPC\\b112.bmp"; #resource "\\Images\\for_SPC\\b113.bmp"; #resource "\\Images\\for_SPC\\b114.bmp"; #resource "\\Images\\for_SPC\\b115.bmp"; #resource "\\Images\\for_SPC\\b116.bmp"; #resource "\\Images\\for_SPC\\b117.bmp"; #resource "\\Images\\for_SPC\\b118.bmp"; #resource "\\Images\\for_SPC\\b119.bmp"; #resource "\\Images\\for_SPC\\b120.bmp"; #resource "\\Images\\for_SPC\\b121.bmp"; #resource "\\Images\\for_SPC\\b122.bmp"; #resource "\\Images\\for_SPC\\b123.bmp"; #resource "\\Images\\for_SPC\\b124.bmp"; #resource "\\Images\\for_SPC\\b125.bmp"; #resource "\\Images\\for_SPC\\b126.bmp"; #resource "\\Images\\for_SPC\\b127.bmp"; #resource "\\Images\\for_SPC\\b128.bmp"; #resource "\\Images\\for_SPC\\b129.bmp"; #resource "\\Images\\for_SPC\\b130.bmp"; #resource "\\Images\\for_SPC\\b131.bmp"; #resource "\\Images\\for_SPC\\b132.bmp"; #resource "\\Images\\for_SPC\\b133.bmp"; #resource "\\Images\\for_SPC\\b134.bmp"; #resource "\\Images\\for_SPC\\b135.bmp"; #resource "\\Images\\for_SPC\\b136.bmp"; #resource "\\Images\\for_SPC\\b137.bmp"; #resource "\\Images\\for_SPC\\b138.bmp"; #resource "\\Images\\for_SPC\\b139.bmp"; #resource "\\Images\\for_SPC\\b140.bmp"; #resource "\\Images\\for_SPC\\b141.bmp"; #resource "\\Images\\for_SPC\\b142.bmp"; #resource "\\Images\\for_SPC\\b143.bmp"; #resource "\\Images\\for_SPC\\b144.bmp"; #resource "\\Images\\for_SPC\\b145.bmp"; #resource "\\Images\\for_SPC\\b146.bmp"; #resource "\\Images\\for_SPC\\b147.bmp"; #resource "\\Images\\for_SPC\\b148.bmp"; #resource "\\Images\\for_SPC\\b149.bmp"; #resource "\\Images\\for_SPC\\b150.bmp"; #resource "\\Images\\for_SPC\\b151.bmp"; #resource "\\Images\\for_SPC\\b152.bmp"; #resource "\\Images\\for_SPC\\b153.bmp"; #resource "\\Images\\for_SPC\\b154.bmp"; #resource "\\Images\\for_SPC\\b155.bmp"; #resource "\\Images\\for_SPC\\b156.bmp"; #resource "\\Images\\for_SPC\\b157.bmp"; #resource "\\Images\\for_SPC\\b158.bmp"; #resource "\\Images\\for_SPC\\b159.bmp"; #resource "\\Images\\for_SPC\\b160.bmp"; #resource "\\Images\\for_SPC\\b161.bmp"; #resource "\\Images\\for_SPC\\b162.bmp"; #resource "\\Images\\for_SPC\\b163.bmp"; #resource "\\Images\\for_SPC\\b164.bmp"; #resource "\\Images\\for_SPC\\b165.bmp"; #resource "\\Images\\for_SPC\\b166.bmp"; #resource "\\Images\\for_SPC\\b167.bmp"; #resource "\\Images\\for_SPC\\b168.bmp"; #resource "\\Images\\for_SPC\\b169.bmp"; #resource "\\Images\\for_SPC\\b170.bmp"; #resource "\\Images\\for_SPC\\b171.bmp"; #resource "\\Images\\for_SPC\\b172.bmp"; #resource "\\Images\\for_SPC\\b173.bmp"; #resource "\\Images\\for_SPC\\b174.bmp"; #resource "\\Images\\for_SPC\\b175.bmp"; #resource "\\Images\\for_SPC\\b176.bmp"; #resource "\\Images\\for_SPC\\b177.bmp"; #resource "\\Images\\for_SPC\\b178.bmp"; #resource "\\Images\\for_SPC\\b179.bmp"; #resource "\\Images\\for_SPC\\b180.bmp"; #resource "\\Images\\for_SPC\\r0.bmp"; #resource "\\Images\\for_SPC\\r1.bmp"; #resource "\\Images\\for_SPC\\r2.bmp"; #resource "\\Images\\for_SPC\\r3.bmp"; #resource "\\Images\\for_SPC\\r4.bmp"; #resource "\\Images\\for_SPC\\r5.bmp"; #resource "\\Images\\for_SPC\\r6.bmp"; #resource "\\Images\\for_SPC\\r7.bmp"; #resource "\\Images\\for_SPC\\r8.bmp"; #resource "\\Images\\for_SPC\\r9.bmp"; #resource "\\Images\\for_SPC\\r10.bmp"; #resource "\\Images\\for_SPC\\r11.bmp"; #resource "\\Images\\for_SPC\\r12.bmp"; #resource "\\Images\\for_SPC\\r13.bmp"; #resource "\\Images\\for_SPC\\r14.bmp"; #resource "\\Images\\for_SPC\\r15.bmp"; #resource "\\Images\\for_SPC\\r16.bmp"; #resource "\\Images\\for_SPC\\r17.bmp"; #resource "\\Images\\for_SPC\\r18.bmp"; #resource "\\Images\\for_SPC\\r19.bmp"; #resource "\\Images\\for_SPC\\r20.bmp"; #resource "\\Images\\for_SPC\\r21.bmp"; #resource "\\Images\\for_SPC\\r22.bmp"; #resource "\\Images\\for_SPC\\r23.bmp"; #resource "\\Images\\for_SPC\\r24.bmp"; #resource "\\Images\\for_SPC\\r25.bmp"; #resource "\\Images\\for_SPC\\r26.bmp"; #resource "\\Images\\for_SPC\\r27.bmp"; #resource "\\Images\\for_SPC\\r28.bmp"; #resource "\\Images\\for_SPC\\r29.bmp"; #resource "\\Images\\for_SPC\\r30.bmp"; #resource "\\Images\\for_SPC\\r31.bmp"; #resource "\\Images\\for_SPC\\r32.bmp"; #resource "\\Images\\for_SPC\\r33.bmp"; #resource "\\Images\\for_SPC\\r34.bmp"; #resource "\\Images\\for_SPC\\r35.bmp"; #resource "\\Images\\for_SPC\\r36.bmp"; #resource "\\Images\\for_SPC\\r37.bmp"; #resource "\\Images\\for_SPC\\r38.bmp"; #resource "\\Images\\for_SPC\\r39.bmp"; #resource "\\Images\\for_SPC\\r40.bmp"; #resource "\\Images\\for_SPC\\r41.bmp"; #resource "\\Images\\for_SPC\\r42.bmp"; #resource "\\Images\\for_SPC\\r43.bmp"; #resource "\\Images\\for_SPC\\r44.bmp"; #resource "\\Images\\for_SPC\\r45.bmp"; #resource "\\Images\\for_SPC\\r46.bmp"; #resource "\\Images\\for_SPC\\r47.bmp"; #resource "\\Images\\for_SPC\\r48.bmp"; #resource "\\Images\\for_SPC\\r49.bmp"; #resource "\\Images\\for_SPC\\r50.bmp"; #resource "\\Images\\for_SPC\\r51.bmp"; #resource "\\Images\\for_SPC\\r52.bmp"; #resource "\\Images\\for_SPC\\r53.bmp"; #resource "\\Images\\for_SPC\\r54.bmp"; #resource "\\Images\\for_SPC\\r55.bmp"; #resource "\\Images\\for_SPC\\r56.bmp"; #resource "\\Images\\for_SPC\\r57.bmp"; #resource "\\Images\\for_SPC\\r58.bmp"; #resource "\\Images\\for_SPC\\r59.bmp"; #resource "\\Images\\for_SPC\\r60.bmp"; #resource "\\Images\\for_SPC\\r61.bmp"; #resource "\\Images\\for_SPC\\r62.bmp"; #resource "\\Images\\for_SPC\\r63.bmp"; #resource "\\Images\\for_SPC\\r64.bmp"; #resource "\\Images\\for_SPC\\r65.bmp"; #resource "\\Images\\for_SPC\\r66.bmp"; #resource "\\Images\\for_SPC\\r67.bmp"; #resource "\\Images\\for_SPC\\r68.bmp"; #resource "\\Images\\for_SPC\\r69.bmp"; #resource "\\Images\\for_SPC\\r70.bmp"; #resource "\\Images\\for_SPC\\r71.bmp"; #resource "\\Images\\for_SPC\\r72.bmp"; #resource "\\Images\\for_SPC\\r73.bmp"; #resource "\\Images\\for_SPC\\r74.bmp"; #resource "\\Images\\for_SPC\\r75.bmp"; #resource "\\Images\\for_SPC\\r76.bmp"; #resource "\\Images\\for_SPC\\r77.bmp"; #resource "\\Images\\for_SPC\\r78.bmp"; #resource "\\Images\\for_SPC\\r79.bmp"; #resource "\\Images\\for_SPC\\r80.bmp"; #resource "\\Images\\for_SPC\\r81.bmp"; #resource "\\Images\\for_SPC\\r82.bmp"; #resource "\\Images\\for_SPC\\r83.bmp"; #resource "\\Images\\for_SPC\\r84.bmp"; #resource "\\Images\\for_SPC\\r85.bmp"; #resource "\\Images\\for_SPC\\r86.bmp"; #resource "\\Images\\for_SPC\\r87.bmp"; #resource "\\Images\\for_SPC\\r88.bmp"; #resource "\\Images\\for_SPC\\r89.bmp"; #resource "\\Images\\for_SPC\\r90.bmp"; #resource "\\Images\\for_SPC\\r91.bmp"; #resource "\\Images\\for_SPC\\r92.bmp"; #resource "\\Images\\for_SPC\\r93.bmp"; #resource "\\Images\\for_SPC\\r94.bmp"; #resource "\\Images\\for_SPC\\r95.bmp"; #resource "\\Images\\for_SPC\\r96.bmp"; #resource "\\Images\\for_SPC\\r97.bmp"; #resource "\\Images\\for_SPC\\r98.bmp"; #resource "\\Images\\for_SPC\\r99.bmp"; #resource "\\Images\\for_SPC\\r100.bmp"; #resource "\\Images\\for_SPC\\r101.bmp"; #resource "\\Images\\for_SPC\\r102.bmp"; #resource "\\Images\\for_SPC\\r103.bmp"; #resource "\\Images\\for_SPC\\r104.bmp"; #resource "\\Images\\for_SPC\\r105.bmp"; #resource "\\Images\\for_SPC\\r106.bmp"; #resource "\\Images\\for_SPC\\r107.bmp"; #resource "\\Images\\for_SPC\\r108.bmp"; #resource "\\Images\\for_SPC\\r109.bmp"; #resource "\\Images\\for_SPC\\r110.bmp"; #resource "\\Images\\for_SPC\\r111.bmp"; #resource "\\Images\\for_SPC\\r112.bmp"; #resource "\\Images\\for_SPC\\r113.bmp"; #resource "\\Images\\for_SPC\\r114.bmp"; #resource "\\Images\\for_SPC\\r115.bmp"; #resource "\\Images\\for_SPC\\r116.bmp"; #resource "\\Images\\for_SPC\\r117.bmp"; #resource "\\Images\\for_SPC\\r118.bmp"; #resource "\\Images\\for_SPC\\r119.bmp"; #resource "\\Images\\for_SPC\\r120.bmp"; #resource "\\Images\\for_SPC\\r121.bmp"; #resource "\\Images\\for_SPC\\r122.bmp"; #resource "\\Images\\for_SPC\\r123.bmp"; #resource "\\Images\\for_SPC\\r124.bmp"; #resource "\\Images\\for_SPC\\r125.bmp"; #resource "\\Images\\for_SPC\\r126.bmp"; #resource "\\Images\\for_SPC\\r127.bmp"; #resource "\\Images\\for_SPC\\r128.bmp"; #resource "\\Images\\for_SPC\\r129.bmp"; #resource "\\Images\\for_SPC\\r130.bmp"; #resource "\\Images\\for_SPC\\r131.bmp"; #resource "\\Images\\for_SPC\\r132.bmp"; #resource "\\Images\\for_SPC\\r133.bmp"; #resource "\\Images\\for_SPC\\r134.bmp"; #resource "\\Images\\for_SPC\\r135.bmp"; #resource "\\Images\\for_SPC\\r136.bmp"; #resource "\\Images\\for_SPC\\r137.bmp"; #resource "\\Images\\for_SPC\\r138.bmp"; #resource "\\Images\\for_SPC\\r139.bmp"; #resource "\\Images\\for_SPC\\r140.bmp"; #resource "\\Images\\for_SPC\\r141.bmp"; #resource "\\Images\\for_SPC\\r142.bmp"; #resource "\\Images\\for_SPC\\r143.bmp"; #resource "\\Images\\for_SPC\\r144.bmp"; #resource "\\Images\\for_SPC\\r145.bmp"; #resource "\\Images\\for_SPC\\r146.bmp"; #resource "\\Images\\for_SPC\\r147.bmp"; #resource "\\Images\\for_SPC\\r148.bmp"; #resource "\\Images\\for_SPC\\r149.bmp"; #resource "\\Images\\for_SPC\\r150.bmp"; #resource "\\Images\\for_SPC\\r151.bmp"; #resource "\\Images\\for_SPC\\r152.bmp"; #resource "\\Images\\for_SPC\\r153.bmp"; #resource "\\Images\\for_SPC\\r154.bmp"; #resource "\\Images\\for_SPC\\r155.bmp"; #resource "\\Images\\for_SPC\\r156.bmp"; #resource "\\Images\\for_SPC\\r157.bmp"; #resource "\\Images\\for_SPC\\r158.bmp"; #resource "\\Images\\for_SPC\\r159.bmp"; #resource "\\Images\\for_SPC\\r160.bmp"; #resource "\\Images\\for_SPC\\r161.bmp"; #resource "\\Images\\for_SPC\\r162.bmp"; #resource "\\Images\\for_SPC\\r163.bmp"; #resource "\\Images\\for_SPC\\r164.bmp"; #resource "\\Images\\for_SPC\\r165.bmp"; #resource "\\Images\\for_SPC\\r166.bmp"; #resource "\\Images\\for_SPC\\r167.bmp"; #resource "\\Images\\for_SPC\\r168.bmp"; #resource "\\Images\\for_SPC\\r169.bmp"; #resource "\\Images\\for_SPC\\r170.bmp"; #resource "\\Images\\for_SPC\\r171.bmp"; #resource "\\Images\\for_SPC\\r172.bmp"; #resource "\\Images\\for_SPC\\r173.bmp"; #resource "\\Images\\for_SPC\\r174.bmp"; #resource "\\Images\\for_SPC\\r175.bmp"; #resource "\\Images\\for_SPC\\r176.bmp"; #resource "\\Images\\for_SPC\\r177.bmp"; #resource "\\Images\\for_SPC\\r178.bmp"; #resource "\\Images\\for_SPC\\r179.bmp"; #resource "\\Images\\for_SPC\\r180.bmp"; //+------------------------------------------------------------------+ //| Type Drawing | //+------------------------------------------------------------------+ enum type_drawing { spindles=0, // Шпиндели line_histogram=1, // Линия и гистограмма }; //+------------------------------------------------------------------+ //| Type Price | //+------------------------------------------------------------------+ enum type_price { open=0, // Open high=1, // High low=2, // Low close=3, // Close middle=4, // Middle }; //--- input parameters input long magic_numb=65758473787389; // Магический номер input type_drawing type_draw=0; // Тип отрисовки индикатора input int period_VR=10; // Период формирования коэффициента объема input int correct_VR=4; // Число для корректировки коэффициента объема input int period_VWMA=10; // Период формирования средневзвешенной цены по объему input int spindles_num=1000; // Количество шпинделей input type_price type_price_VWMA=0; // Вид цены для построения средневзвешенной цены по объему // open=0; high=1; low=2; close=3; middle=4 //--- выходные переменные int ext_period_VR=0; int ext_correct_VR; int ext_period_VWMA=0; int ext_spin_num=0; int long_period=0; // переменная подсчета длинного периода //--- переменные параметра графика double win_price_max_ext=0; // максимальное значение графика double win_price_min_ext=0; // минимальное значение графика double win_height_pixels_ext=0; // высота в пикселях double win_width_pixels_ext=0; // ширина в пикселях double win_bars_ext=0; // ширина в барах //--- вспомогательные переменные int end_bar; //--- indicator buffers double Buff_up[]; // буфер верхних точек гистограммы double Buff_down[]; // буфер нижних точек гистограммы double Buff_color_up_down[]; // буфер цвета гистограммы double Buff_open_ext[]; // выводной буфер цен открытия double Buff_close_ext[]; // выводной буфер цен закрытия double Buff_VWMA_ext[]; // выводной буфер средневзвешенной цены по объему double Buff_open[]; // буфер цен открытия double Buff_close[]; // буфер цен закрытия double Buff_VWMA[]; // буфер средневзвешенной цены по объему double Buff_VR[]; // буфер коэффициента объема double Buff_time[]; // буфер времени открытия бара //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- проверка входящих переменных if(period_VR<=0) { ext_period_VR=10; // изменение значения переменной Alert("Период формирования коэффициента объема введен некорректно и был изменен."); } else ext_period_VR=period_VR; if(correct_VR<=0) { ext_correct_VR=10; // изменение значения переменной Alert("Число для корректировки коэффициента объема введено некорректно и было изменено."); } else ext_correct_VR=correct_VR; if(period_VWMA<=0) { ext_period_VWMA=10; // изменение значения переменной Alert("Период формирования средневзвешенной цены по объему введен некорректно и был изменен."); } else ext_period_VWMA=period_VWMA; if(spindles_num<=0) { ext_spin_num=10; // изменение значения переменной Alert("Количество шпинделей введено некорректно и было изменено."); } else ext_spin_num=spindles_num; //--- поиск самого длинного периода для построения графика if(ext_period_VR>ext_period_VWMA)long_period=ext_period_VR; else long_period=ext_period_VWMA; //--- indicator buffers mapping SetIndexBuffer(0,Buff_up,INDICATOR_DATA); SetIndexBuffer(1,Buff_down,INDICATOR_DATA); SetIndexBuffer(2,Buff_color_up_down,INDICATOR_COLOR_INDEX); SetIndexBuffer(3,Buff_open_ext,INDICATOR_DATA); SetIndexBuffer(4,Buff_close_ext,INDICATOR_DATA); SetIndexBuffer(5,Buff_VWMA_ext,INDICATOR_DATA); SetIndexBuffer(6,Buff_open,INDICATOR_CALCULATIONS); SetIndexBuffer(7,Buff_close,INDICATOR_CALCULATIONS); SetIndexBuffer(8,Buff_VWMA,INDICATOR_CALCULATIONS); SetIndexBuffer(9,Buff_VR,INDICATOR_CALCULATIONS); SetIndexBuffer(10,Buff_time,INDICATOR_CALCULATIONS); //--- установка имени индикатора IndicatorSetString(INDICATOR_SHORTNAME,"SPC "+IntegerToString(magic_numb)); PlotIndexSetString(0,PLOT_LABEL,"SPC"); //--- установка точности IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //--- установка первого бара, с которого начнется рисование индикатора PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,long_period+1); //--- запрещаем показ результатов текущих значений для индикатора PlotIndexSetInteger(0,PLOT_SHOW_DATA,false); PlotIndexSetInteger(1,PLOT_SHOW_DATA,false); PlotIndexSetInteger(2,PLOT_SHOW_DATA,false); PlotIndexSetInteger(3,PLOT_SHOW_DATA,false); //--- устанавливаем значения, которые не будут отображаться PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0); PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0); //--- создание используемых объектов if(type_draw==0) { for(int x=0; x<=ext_spin_num; x++) { ObjectCreate(0,"SPC"+IntegerToString(magic_numb)+IntegerToString(x)+"1",OBJ_BITMAP,ChartWindowFind(),__DATE__,0); ObjectCreate(0,"SPC"+IntegerToString(magic_numb)+IntegerToString(x)+"2",OBJ_BITMAP,ChartWindowFind(),__DATE__,0); ObjectCreate(0,"SPC"+IntegerToString(magic_numb)+IntegerToString(x)+"3",OBJ_BITMAP,ChartWindowFind(),__DATE__,0); ObjectCreate(0,"SPC"+IntegerToString(magic_numb)+IntegerToString(x)+"4",OBJ_BITMAP,ChartWindowFind(),__DATE__,0); } } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- событие нажатия клавиши на клавиатуре if(id==CHARTEVENT_KEYDOWN) { if(lparam==82) { if(ChartGetDouble(0,CHART_PRICE_MAX,ChartWindowFind())>0)// проверяем наличие данных на графике { if(func_check_chart()==true) { if(type_draw==0)func_drawing(true,ext_spin_num,end_bar); } } } } } //+------------------------------------------------------------------+ //| 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[]) { //--- провека наличия истории по периоду if(rates_totalclose[i])Buff_color_up_down[i]=1;// нисходящий бар if(open[i]==close[i])Buff_color_up_down[i]=2;// доджи бар //--- заполняем вспомогательные буферы Buff_open[i]=open[i]; Buff_close[i]=close[i]; Buff_time[i]=double(time[i]); //--- производим расчет коэфициента объема double mid_vol=0; int x=0; for(x=i-ext_period_VR; x<=i; x++) { mid_vol+=double(tick_volume[x]); } mid_vol/=x; Buff_VR[i]=tick_volume[i]/mid_vol; // подсчет VR //--- производим расчет средневзвешенной цены по объему long vol=0; double price_vol=0; x=0; switch(type_price_VWMA) { case 0: { for(x=i-ext_period_VWMA; x<=i; x++) { price_vol+=double(open[x]*tick_volume[x]); vol+=tick_volume[x]; } } break; //--- case 1: { for(x=i-ext_period_VWMA; x<=i; x++) { price_vol+=double(high[x]*tick_volume[x]); vol+=tick_volume[x]; } } break; //--- case 2: { for(x=i-ext_period_VWMA; x<=i; x++) { price_vol+=double(low[x]*tick_volume[x]); vol+=tick_volume[x]; } } break; //--- case 3: { for(x=i-ext_period_VWMA; x<=i; x++) { price_vol+=double(close[x]*tick_volume[x]); vol+=tick_volume[x]; } } break; //--- case 4: { for(x=i-ext_period_VWMA; x<=i; x++) { double price=(open[x]+high[x]+low[x]+close[x])/4; price_vol+=double(price*tick_volume[x]); vol+=tick_volume[x]; } } break; } //--- Buff_VWMA[i]=price_vol/vol; // подсчет VWMA //--- if(type_draw==1) { Buff_open_ext[i]=Buff_open[i]; Buff_close_ext[i]=Buff_close[i]; Buff_VWMA_ext[i]=Buff_VWMA[i]; } else { //--- уменьшаем размер неиспользуемых массивов ArrayResize(Buff_open_ext,1); ArrayResize(Buff_close_ext,1); ArrayResize(Buff_VWMA_ext,1); //--- обнуляем неиспользуемые массивы ZeroMemory(Buff_open_ext); ZeroMemory(Buff_close_ext); ZeroMemory(Buff_VWMA_ext); } } //--- end_bar=rates_total;// определяем номер последнего бара //--- if(ChartGetDouble(0,CHART_PRICE_MAX,ChartWindowFind())>0 && type_draw==0)// проверяем наличие данных в окне индикатора для начала построения { func_drawing(func_check_chart(),ext_spin_num,end_bar); } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Func Check Chart | //+------------------------------------------------------------------+ bool func_check_chart() { //--- ответная переменная bool x=false; //--- узнаем размер графика int win=ChartWindowFind(); // определяем подокно, так как индикатор работает в отдельном окне double win_price_max=ChartGetDouble(0,CHART_PRICE_MAX,win); // максимальное значение графика double win_price_min=ChartGetDouble(0,CHART_PRICE_MIN,win); // минимальное значение графика double win_height_pixels=(double)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,win); // высота в пикселях double win_width_pixels=(double)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,win); // ширина в пикселях double win_bars=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS,win); // ширина в барах //--- проверяем поменялись ли значения int factor=(int)MathPow(10,_Digits);// устанавливаем множитель для перевода типа double в тип int if(int(win_price_max*factor)!=int(win_price_max_ext*factor)) { win_price_max_ext=win_price_max; x=true; } if(int(win_price_min*factor)!=int(win_price_min_ext*factor)) { win_price_min_ext=win_price_min; x=true; } if(int(win_height_pixels*factor)!=int(win_height_pixels_ext*factor)) { win_height_pixels_ext=win_height_pixels; x=true; } if(int(win_width_pixels*factor)!=int(win_width_pixels_ext*factor)) { win_width_pixels_ext=win_width_pixels; x=true; } if(int(win_bars*factor)!=int(win_bars_ext*factor)) { win_bars_ext=win_bars; x=true; } if(func_new_bar(PERIOD_CURRENT)==true) { x=true; } return(x); } //+------------------------------------------------------------------+ //| Func Picture | //+------------------------------------------------------------------+ void func_picture(string name, // имя объекта double open, // цена открытия бара double close, // цена закрытия бара datetime time, // время бара double VR, // значение коэффициента объема double VR_maximum, // максимальное значение коэффициента объема double VWMA, // значение средневзвешенной цены по объему int correct, // параметр корректировки коэффициента объема при отображении double scale_height,// масштаб высоты (пиксели/цена) double scale_width) // масштаб ширины (пиксели/бары) { string first_name;// первая буква названия файла, используемого в построении string second_name_right;// остальное название файла, используемого в построении справа string second_name_left; // остальное название файла, используемого в построении слева double cathetus_a;// катет a double cathetus_b;// катет b double hypotenuse;// гипотенуза int corner;// угол //--- находим "углы" открытия и закрытия бара cathetus_b=int(VR/VR_maximum/correct*scale_width);// ширина в пикселях //picture 540 if(open<=close) first_name="r";// восходящий бар или доджи if(open>close) first_name="b"; // нисходящий бар //--- if(openVWMA)// VWMA находится ниже цены открытия { cathetus_a=int((open-VWMA)*scale_height); hypotenuse=MathCeil(MathSqrt(MathPow(cathetus_a,2)+MathPow(cathetus_b,2))); if(hypotenuse<=0) hypotenuse=1; corner=int((MathArcsin(cathetus_b/hypotenuse)*360/(M_PI*2))); second_name_right=IntegerToString(corner); second_name_left=IntegerToString(180-corner); func_obj_mod(name+"1","::Images\\for_SPC\\"+first_name+second_name_right+".bmp",int(cathetus_b+1),int(cathetus_a+1),0,ANCHOR_LEFT_UPPER,time,open); func_obj_mod(name+"2","::Images\\for_SPC\\"+first_name+second_name_left+".bmp",int(cathetus_b+1),int(cathetus_a+1),540-int(cathetus_a+2),ANCHOR_RIGHT_UPPER,time,open); } if(open==VWMA)// VWMA находится на уровне цены открытия { func_obj_mod(name+"1","::Images\\for_SPC\\"+first_name+"90"+".bmp",int(cathetus_b+1),2,0,ANCHOR_LEFT,time,open); func_obj_mod(name+"2","::Images\\for_SPC\\"+first_name+"90"+".bmp",int(cathetus_b+1),2,0,ANCHOR_RIGHT,time,open); } if(closeVWMA)// VWMA находится ниже цены закрытия { cathetus_a=int((close-VWMA)*scale_height); hypotenuse=MathCeil(MathSqrt(MathPow(cathetus_a,2)+MathPow(cathetus_b,2))); if(hypotenuse<=0) hypotenuse=1; corner=int((MathArcsin(cathetus_b/hypotenuse)*360/(M_PI*2))); second_name_right=IntegerToString(corner); second_name_left=IntegerToString(180-corner); func_obj_mod(name+"3","::Images\\for_SPC\\"+first_name+second_name_right+".bmp",int(cathetus_b+1),int(cathetus_a+1),0,ANCHOR_LEFT_UPPER,time,close); func_obj_mod(name+"4","::Images\\for_SPC\\"+first_name+second_name_left+".bmp",int(cathetus_b+1),int(cathetus_a+1),540-int(cathetus_a+2),ANCHOR_RIGHT_UPPER,time,close); } if(close==VWMA)// VWMA находится на уровне цены закрытия { func_obj_mod(name+"3","::Images\\for_SPC\\"+first_name+"90"+".bmp",int(cathetus_b+1),2,0,ANCHOR_LEFT,time,close); func_obj_mod(name+"4","::Images\\for_SPC\\"+first_name+"90"+".bmp",int(cathetus_b+1),2,0,ANCHOR_RIGHT,time,close); } } //+------------------------------------------------------------------+ //|Func Obj Mod | //+------------------------------------------------------------------+ void func_obj_mod(string name, // имя объекта string file, // путь к ресурсу файла int pix_x_b, // видимость по X int pix_y_a, // видимость по Y int shift_y, // сдвиг по Y ENUM_ANCHOR_POINT anchor,// точка привязки datetime time, // координата времени double price) // координата цены { ObjectSetString(0,name,OBJPROP_BMPFILE,file); ObjectSetInteger(0,name,OBJPROP_XSIZE,pix_x_b);// видимость по X ObjectSetInteger(0,name,OBJPROP_YSIZE,pix_y_a);// видимость по Y ObjectSetInteger(0,name,OBJPROP_XOFFSET,0);// без сдвига по оси X ObjectSetInteger(0,name,OBJPROP_YOFFSET,shift_y);// устанавливаем сдвиг по оси Y ObjectSetInteger(0,name,OBJPROP_BACK,false);// отобразим на переднем плане ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);// отключаем режим перемещения ObjectSetInteger(0,name,OBJPROP_SELECTED,false); ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);// скроем имя графического объекта ObjectSetInteger(0,name,OBJPROP_ANCHOR,anchor);// устанавливаем точку привязки ObjectSetInteger(0,name,OBJPROP_TIME,time);// устанавливаем координату времени ObjectSetDouble(0,name,OBJPROP_PRICE,price);// устанавливаем координату цены } //+------------------------------------------------------------------+ //| Func Drawing | //+------------------------------------------------------------------+ void func_drawing(bool type_action,// вид действия модификации: 0-два последних, 1-все int num, // количество прорисовываемых шпиндилей int end_bar_now) // текущий последний бар { int begin; if(end_bar_now>num)begin=end_bar_now-num; else begin=long_period+1; //--- поиск максимального значения VR double VR_max=0; for(int x=begin; x0) // данные скопированы { if(old_times!=new_time[0]) // если старое время бара не равно новому { if(old_times!=0) res=true; // если это не первый запуск, то истина = новый бар old_times=new_time[0]; // запоминаем время бара } } return(res); } //+------------------------------------------------------------------+