Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Код функции OnInit() и OnChartEvent() можете показать?
Да, без проблем
--------------------------------
{
start=0;
//---
//--- Инициализируем буферы
//---
Print("Init ",_Symbol);
SetIndexBuffer(0,ZZ_u0_BufferHi,INDICATOR_DATA);
SetIndexBuffer(1,ZZ_u0_BufferLo,INDICATOR_DATA);
SetIndexBuffer(2,ZZ_u1_BufferHi,INDICATOR_DATA);
SetIndexBuffer(3,ZZ_u1_BufferLo,INDICATOR_DATA);
SetIndexBuffer(4,ZZ_u2_BufferHi,INDICATOR_DATA);
SetIndexBuffer(5,ZZ_u2_BufferLo,INDICATOR_DATA);
SetIndexBuffer(6,ZZ_u3_BufferHi,INDICATOR_DATA);
SetIndexBuffer(7,ZZ_u3_BufferLo,INDICATOR_DATA);
SetIndexBuffer(8,ZZ_u4_BufferHi,INDICATOR_DATA);
SetIndexBuffer(9,ZZ_u4_BufferLo,INDICATOR_DATA);
SetIndexBuffer(10,ZZ_u5_BufferHi,INDICATOR_DATA);
SetIndexBuffer(11,ZZ_u5_BufferLo,INDICATOR_DATA);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0);
PlotIndexSetString(0,PLOT_LABEL,"Level 0");
PlotIndexSetString(1,PLOT_LABEL,"Level 1");
PlotIndexSetString(2,PLOT_LABEL,"Level 2");
PlotIndexSetString(3,PLOT_LABEL,"Level 3");
PlotIndexSetString(4,PLOT_LABEL,"Level 4");
PlotIndexSetString(5,PLOT_LABEL,"Level 5");
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,Width);
PlotIndexSetInteger(2,PLOT_LINE_WIDTH,Width);
PlotIndexSetInteger(3,PLOT_LINE_WIDTH,Width);
PlotIndexSetInteger(4,PLOT_LINE_WIDTH,Width);
PlotIndexSetInteger(5,PLOT_LINE_WIDTH,Width);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,Color1);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,Color2);
PlotIndexSetInteger(3,PLOT_LINE_COLOR,Color3);
PlotIndexSetInteger(4,PLOT_LINE_COLOR,Color4);
PlotIndexSetInteger(5,PLOT_LINE_COLOR,Color5);
PlotIndexSetInteger(1,PLOT_LINE_STYLE,L_Style);
PlotIndexSetInteger(2,PLOT_LINE_STYLE,L_Style);
PlotIndexSetInteger(3,PLOT_LINE_STYLE,L_Style);
PlotIndexSetInteger(4,PLOT_LINE_STYLE,L_Style);
PlotIndexSetInteger(5,PLOT_LINE_STYLE,L_Style);
if(!Flag_Ris_0U) PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrNONE);
else PlotIndexSetInteger(0,PLOT_LINE_COLOR,Color0);
tLast_Signal_Ur1_Max=0;
tLast_Signal_Ur1_Min=0;
tLast_Signal_Ur2_Max=0;
tLast_Signal_Ur2_Min=0;
tLast_Signal_Ur3_Max=0;
tLast_Signal_Ur3_Min=0;
tLast_Signal_Ur4_Max=0;
tLast_Signal_Ur4_Min=0;
tLast_Signal_Ur5_Max=0;
tLast_Signal_Ur5_Min=0;
ArraySetAsSeries(ZZ_u0_BufferHi,true);
ArraySetAsSeries(ZZ_u0_BufferLo,true);
ArraySetAsSeries(ZZ_u1_BufferHi,true);
ArraySetAsSeries(ZZ_u1_BufferLo,true);
ArraySetAsSeries(ZZ_u2_BufferHi,true);
ArraySetAsSeries(ZZ_u2_BufferLo,true);
ArraySetAsSeries(ZZ_u3_BufferHi,true);
ArraySetAsSeries(ZZ_u3_BufferLo,true);
ArraySetAsSeries(ZZ_u4_BufferHi,true);
ArraySetAsSeries(ZZ_u4_BufferLo,true);
ArraySetAsSeries(ZZ_u5_BufferHi,true);
ArraySetAsSeries(ZZ_u5_BufferLo,true);
IndicatorSetString(INDICATOR_SHORTNAME,"s-extremumHL");
//---
return(INIT_SUCCEEDED);
}
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_total==prev_calculated) return(rates_total); //Чтобы не работать на каждом тике
//---
//---
//Print("Новый бар");
if(CommentScreen)
{
//---
//--- Нарисуем графику ---
//---
string s;
s="\nAlertTerminal - "+(string)AlertTerminal+
"\nСигнал Max 1у - "+(string)Flag_Ur1_Max+
"\nСигнал Min 1у - "+(string)Flag_Ur1_Min+
"\nСигнал Max 2у - "+(string)Flag_Ur2_Max+
"\nСигнал Min 2у - "+(string)Flag_Ur2_Min+
"\nСигнал Max 3у - "+(string)Flag_Ur3_Max+
"\nСигнал Min 3у - "+(string)Flag_Ur3_Min+
"\nСигнал Max 4у - "+(string)Flag_Ur4_Max+
"\nСигнал Min 4у - "+(string)Flag_Ur4_Min+
"\nСигнал Max 5у - "+(string)Flag_Ur5_Max+
"\nСигнал Min 5у - "+(string)Flag_Ur5_Min+
"\nPush - "+(string)Flag_Push+
"\nEmail - "+(string)Flag_Mail;
Comment(s) ;
}
else Comment("") ;
if(ArraySize(ZZ_u0_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u0_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u1_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u1_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u2_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u2_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u3_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u3_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u4_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u4_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u5_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u5_BufferLo)<3) return(rates_total);
//--- Развернем массивы
ArraySetAsSeries(time,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
и там дальше пошли вычисления
Да, без проблем
А реализацию OnChartEvent()? И вставляйте код, пожалуйста, через кнопку SRC
Кто-то вроде где-то писал что стандартный зигзаг мерцает. Так что похоже на глюк терминала в определенном виде рисования. В СД.
Можно провести эксперимент - каждый загрузит стандартный зигзаг и понаблюдает...
Я не смогу - так как я очень часто переключаюсь терминал - сайт - метаэтидор - сайт - справка метаэтирора или в другой последовательности, но в итоге адский коктейль - поэтому качество наблюдений за терминалом от меня будет ноль целых ноль десятых :(
А реализацию OnChartEvent()? И вставляйте код, пожалуйста, через кнопку SRC
OnChartEvent() выше там же, вставил через SRC
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_total==prev_calculated) return(rates_total); //Чтобы не работать на каждом тике
//---
//---
//Print("Новый бар");
if(CommentScreen)
{
//---
//--- Нарисуем графику ---
//---
string s;
s="\nAlertTerminal - "+(string)AlertTerminal+
"\nСигнал Max 1у - "+(string)Flag_Ur1_Max+
"\nСигнал Min 1у - "+(string)Flag_Ur1_Min+
"\nСигнал Max 2у - "+(string)Flag_Ur2_Max+
"\nСигнал Min 2у - "+(string)Flag_Ur2_Min+
"\nСигнал Max 3у - "+(string)Flag_Ur3_Max+
"\nСигнал Min 3у - "+(string)Flag_Ur3_Min+
"\nСигнал Max 4у - "+(string)Flag_Ur4_Max+
"\nСигнал Min 4у - "+(string)Flag_Ur4_Min+
"\nСигнал Max 5у - "+(string)Flag_Ur5_Max+
"\nСигнал Min 5у - "+(string)Flag_Ur5_Min+
"\nPush - "+(string)Flag_Push+
"\nEmail - "+(string)Flag_Mail;
Comment(s) ;
}
else Comment("") ;
if(ArraySize(ZZ_u0_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u0_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u1_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u1_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u2_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u2_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u3_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u3_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u4_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u4_BufferLo)<3) return(rates_total);
if(ArraySize(ZZ_u5_BufferHi)<3) return(rates_total);
if(ArraySize(ZZ_u5_BufferLo)<3) return(rates_total);
//--- Развернем массивы
ArraySetAsSeries(time,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
Эм.. ок... но OnCalculate() я не просил. Нужна реализация OnChartEvent()!
Извините, я немножечко не так прочитал, в общем OnChartEvent() не используется
вот все что есть
Извините, я немножечко не так прочитал, в общем OnChartEvent() не используется
вот все что есть
Тогда... да, пожалуй нужно писать в СД, чтобы там разбирались с типом построения DRAW_ZIGZAG.
Возможно еще нужно будет проверить что писал Alexey Viktorov -- "переменная prev_calculated обнуляется"
Может у кого-то есть еще какие-то догадки?
Да, без проблем
--------------------------------
и там дальше пошли вычисления
if(ArraySize(ZZ_u0_BufferHi)<3) return(rates_total); // затыка на время отладки и не совсем корректая - во первых это таймсерия и разрабы божаться что размеры контроллируют, во вторых в массиве остался мусор
при prev_calcluted=0 стоит ещё исполнять ArrayFill(....) к таймсериям, иначе возникнут (могут возникнуть) визуальные глюки..или гарантировать явное заполнение массива при вычислениях.
и возможно (не знаю ваш алгоритм, но наверное так) стоит из OnCalculate возвращать номер бара с которого пересчёт точно не требуется (вершина зигзага зафиксировалась и не будет изменена.
PS/ веб-мастерам - разберитесь уже с юзабилити сайта ! такое ощущение, что цитирование/публикация кода это вещь тут чуждая и с ней целенаправленно борются :-)