Подскажите как должен выглядеть код, в котором прописаны следующие условия: если цвет индикатора меняется с красного на синий ставим отложенный ордер buystop, если наоборот цвет индюка сменился с синего на красный то sellstop?
MikeM: Если каждый раз при смене цвета ставить ордер, то не много ли их будет?
Индикатор трендовый, он не каждый же бар меняет цвет. Меня интересует само условие проверки смены цвета баров и на основе этого выставить отложку. Например открылся новый бар, смотрим если предыдущий стал синий, а перед предыдущим был красный, значит произошла смена цветов и нужно выставить отложник.
Как правильно через iCustom(), прикрепить один индикатор к другому? У меня есть один индикатор в котором все 8 индикаторных массива заняты. Как правильно создать второй, чтобы в нём, в 1 индикаторном массиве, рисовалась кривая из первого индикатора? Оба индикатора #property indicator_chart_window. Самое наглядное объяснение, это аналог в виде кода двух связанных индикаторов.
//+------------------------------------------------------------------+//| ___ORSE.mq4 |//+------------------------------------------------------------------+#property indicator_chart_window // Индикатор рисуется в основном окне#property indicator_buffers 8// Количество буферов#property indicator_color1 Black // Цвет линии 0 буфера опорной МАO#property indicator_color2 Black // Цвет линии 1 буфера опорной МАO сглаженной#property indicator_color3 Blue // Цвет линии 2 буфера расчётной МАR#property indicator_color4 Blue // Цвет линии 3 буфера расчётной МАR сглаженной#property indicator_color5 LimeGreen // Цвет линии 4 буфера скоростной МАS#property indicator_color6 LimeGreen // Цвет линии 5 буфера скоростной МАS сглаженной#property indicator_color7 Red // Цвет линии 6 буфера импульсной МАE#property indicator_color8 Red // Цвет линии 7 буфера импульсной МАE сглаженнойdouble TF = 1; // Тайм Фрэйм//-----------------int Period_O = 13; // Период опорной Oint Aver_Bars_O = 5; // Колич. баров для сглаживания опорной Oint Period_R = 21; // Период расчётной Rint Aver_Bars_R = 5; // Колич. баров для сглаживания расчётной Rint Bars_V_S = 5; // Колич.баров для расчёта скоростной Sdouble K_V_S = 2.1; // Коэффициент усиления разности значений скоростной Sint Aver_Bars_S = 5; // Колич. баров для сглаживания скоростной Sint Bars_V_E = 5; // Колич.баров для расчёта импульсной Edouble K_V_E = 2.1; // Коэффициент усиления разности значений импульсной Eint Aver_Bars_E = 5; // Колич. баров для сглаживания импульсной E//-----------------int Ma_method = 3; // MODE_LWMA 3 Линейно-взвешенное скользящее среднее int Applied_price = 5; // PRICE_TYPICAL 5 Типичная цена (High+Low+Close)/3//--------------------------------------------------------------------// Расчитываемые величиныdouble Line_0[]; // Инидикаторн. массив опорной O Blackdouble Line_1[]; // Инидикаторн. массив опорной O сглаженный Blackdouble Line_2[]; // Инидикаторн. массив расчётной R Bluedouble Line_3[]; // Инидикаторн. массив расчётной R сглаженный Bluedouble Line_4[]; // Инидикаторн. массив скоростной S Greendouble Line_5[]; // Инидикаторн. массив скоростной S сглаженный Greendouble Line_6[]; // Инидикаторн. массив импульсной E Reddouble Line_7[]; // Инидикаторн. массив импульсной E сглаженный Redint Calc_Period_O; // Расчитываемый период опорной Oint Calc_Period_R; // Расчитываемый период расчётной Rdouble Bars_S; // Вычисленное количество баров (период) для измерения скорости Sdouble Bars_E; // Вычисленное количество баров (период) для измерения импульса Е//--------------------------------------------------------------------int init()
{
SetIndexBuffer(0,Line_0); // Назначение массива буферу опорной O BlackSetIndexBuffer(1,Line_1); // Назначение массива буферу опорной O сглаженный Black SetIndexBuffer(2,Line_2); // Назначение массива буферу расчётной R BlueSetIndexBuffer(3,Line_3); // Назначение массива буферу расчётной R сглаженный BlueSetIndexBuffer(4,Line_4); // Назначение массива буферу скоростной S GreenSetIndexBuffer(5,Line_5); // Назначение массива буферу скоростной S сглаженный GreenSetIndexBuffer(6,Line_6); // Назначение массива буферу импульсной E RedSetIndexBuffer(7,Line_7); // Назначение массива буферу импульсной E сглаженный Red
SetIndexStyle (0,DRAW_NONE,STYLE_SOLID,1); // Стиль линии, толщина опорной O Black
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2); // Стиль линии, толщина опорной O сглаженный Black
SetIndexStyle (2,DRAW_NONE,STYLE_SOLID,1); // Стиль линии, толщина расчётной R Blue
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID,2); // Стиль линии, толщина расчётной R сглаженный Blue
SetIndexStyle (4,DRAW_NONE,STYLE_SOLID,1); // Стиль линии, толщина скоростной S Green
SetIndexStyle (5,DRAW_LINE,STYLE_SOLID,2); // Стиль линии, толщина скоростной S сглаженный Green
SetIndexStyle (6,DRAW_NONE,STYLE_SOLID,1); // Стиль линии, толщина импульсной E Red
SetIndexStyle (7,DRAW_LINE,STYLE_SOLID,2); // Стиль линии, толщина импульсной E сглаженный Red
Calc_Period_O = TF * Period_O; // Вычисленный период O
Calc_Period_R = TF * Period_R; // Вычисленный период R для S и Е
Bars_S = TF * Bars_V_S; // Вычисленное количество баров (период) для измерения скорости S
Bars_E = TF * Bars_V_E; // Вычисленное количество баров (период) для измерения импульса Еreturn;
}
//--------------------------------------------------------------------int deinit()
{
return(0);
}
//--------------------------------------------------------------------int start()
{
//----------------------------------------------------------------int i,n,s,e,Counted_bars;
double MAO,MAR,MAR_c,MAR_p,MAS,MAS_c,MAS_p,MAE,Sum;
//----------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанного//----------------------------------------------------------------while(i>=0)
{
//--------------------------------------------------------------// ОПОРНАЯ
MAO=iMA(NULL, 0, Calc_Period_O, 0, Ma_method, Applied_price, i); // Значение опорной МАO
Line_0[i]=MAO; // Индик. массив опорной O//--------------------------------------------------------------if (Aver_Bars_O<0) // Если неверно задано сглаживание
Aver_Bars_O=0; // .. то не меньше нуля
Sum=0; // Технический приёмfor(n=i; n<=i+Aver_Bars_O; n++) // Суммироваение последних значен.
Sum=Sum + Line_0[n]; // Накопление суммы последн. знач.
Line_1[i]= Sum/(Aver_Bars_O+1); // Индик. массив сглаженной линии Black//--------------------------------------------------------------// РАСЧЁТНАЯ
MAR=iMA(NULL, 0, Calc_Period_R, 0, Ma_method, Applied_price, i); // Значение расчётной МАR
Line_2[i]=MAR; // Индик. массив расчётной R//--------------------------------------------------------------if (Aver_Bars_R<0) // Если неверно задано сглаживание
Aver_Bars_R=0; // .. то не меньше нуля
Sum=0; // Технический приёмfor(n=i; n<=i+Aver_Bars_R; n++) // Суммироваение последних значен.
Sum=Sum + Line_2[n]; // Накопление суммы последн. знач.
Line_3[i]= Sum/(Aver_Bars_R+1); // Индик. массив сглаженной линии Blue//--------------------------------------------------------------// СКОРОСТНАЯ
MAR_c=Line_2[i];
s=i+Bars_S;
MAR_p=Line_2[s];
MAS= MAO+K_V_S*(MAR_c-MAR_p); // Значение скоростной MAS
Line_4[i]= MAS; // Индик. массив скоростной S//--------------------------------------------------------------if (Aver_Bars_S<0) // Если неверно задано сглаживание
Aver_Bars_S=0; // .. то не меньше нуля
Sum=0; // Технический приёмfor(n=i; n<=i+Aver_Bars_S; n++) // Суммироваение последних значен.
Sum=Sum + Line_4[n]; // Накопление суммы последн. знач.
Line_5[i]= Sum/(Aver_Bars_S+1); // Индик. массив сглаженной линии LimeGreen//--------------------------------------------------------------// ИМПУЛЬСНАЯ
MAS_c=Line_5[i];
e=i+Bars_E;
MAS_p=Line_5[e];
MAE= MAO+0.001*K_V_E*(MAS_c-MAS_p)*Volume[i]; // Значение импульсной MAE
Line_6[i]= MAE; // Индик. массив импульсной Е//--------------------------------------------------------------if (Aver_Bars_E<0) // Если неверно задано сглаживание
Aver_Bars_E=0; // .. то не меньше нуля
Sum=0; // Технический приёмfor(n=i; n<=i+Aver_Bars_E; n++) // Суммироваение последних значен.
Sum=Sum + Line_6[n]; // Накопление суммы последн. знач.
Line_7[i]= Sum/(Aver_Bars_E+1); // Индик. массив сглаженной линии Red
i--; // Расчёт индекса следующего бара
}
return;
}
Индикатор трендовый, он не каждый же бар меняет цвет. Меня интересует само условие проверки смены цвета баров и на основе этого выставить отложку.
Комп не различает цвет, а только цифры 0 и 1. Поэтому в условие нужно поставить причину смены цвета в индикаторе. Например, смена направления цены и на сколько значительна эта смена!
Подскажите как должен выглядеть код, в котором прописаны следующие условия: если цвет индикатора меняется с красного на синий ставим отложенный ордер buystop, если наоборот цвет индюка сменился с синего на красный то sellstop?
Допустимо ли использовать сложные составные условия
очень даже допустимо
Если каждый раз при смене цвета ставить ордер, то не много ли их будет?
Индикатор трендовый, он не каждый же бар меняет цвет. Меня интересует само условие проверки смены цвета баров и на основе этого выставить отложку. Например открылся новый бар, смотрим если предыдущий стал синий, а перед предыдущим был красный, значит произошла смена цветов и нужно выставить отложник.
У меня есть один индикатор в котором все 8 индикаторных массива заняты. Как правильно создать второй, чтобы в нём, в 1 индикаторном массиве, рисовалась кривая из первого индикатора?
Оба индикатора #property indicator_chart_window.
Самое наглядное объяснение, это аналог в виде кода двух связанных индикаторов.
Заранее, СПАСИБО!!!
Это работает.Это не работает.
//+------------------------------------------------------------------+ //| __proba_ORSE.mq4 | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 LightSeaGreen //---- buffers double MovingBuffer[]; //+------------------------------------------------------------------+ int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,MovingBuffer); return(0); } //+------------------------------------------------------------------+ int start() { int i,counted_bars=IndicatorCounted(); //---- int limit=Bars-counted_bars; if(counted_bars>0) limit++; for(i=0; i<limit; i++) MovingBuffer[i]=iCustom(NULL,0,"___ORSE", 0, i); return(0); }Терминал виснет. Почему, не пойму.
Индикатор трендовый, он не каждый же бар меняет цвет. Меня интересует само условие проверки смены цвета баров и на основе этого выставить отложку.
TimeCurrent() % 86400
????