"Не работает" бессмысленно - все равно что сказать, что машина не работает. Не заводится, не включается передача, нет электричества, пропал ключ, спущенные шины - бессмысленно. Как задавать вопросы по-умному. 2004 При вопросе о коде
KristijanO: Я получаю много ошибок... Я получаю ошибку неожиданного токена.
Не захламляйте другие темы своими сообщениями не по теме. Вы не просите "помощи в кодировании". В следующий раз создайте свою собственную, новую тему.
Вы действительно ожидаете ответа? Здесь нет читающих мысли, и наши хрустальные шары треснуты. Мы не можем видеть ваш сломанный код. Нет никакого контекста для вашей одной строки. Ваша проблема, скорее всего, выше этого.
Опубликуйте весь релевантный код (например, что находится выше этой строки).
Опубликуйте сообщения об ошибках и укажите, в какой строке возникла ошибка.
Я потратил 3 недели на создание пользовательского индикатора, но явно недостаточно хорош, надеясь, что кто-то сможет помочь.
У моего индикатора 3 внешних параметра: "Таймфрейм", "Номер отображаемого уровня на графике" и "Минимальное расстояние между каждым уровнем".
Все, что мне нужно для кода, это сгруппировать, удалить фрактальную точку на минимальном расстоянии, а затем отобразить оставшийся уровень фрактальной точки.
Первая версия (MainRS_AddOn2.mq4), которую я создал, делает именно то, что я хочу, однако я использую глупый метод, рисуя объект и продолжая изменять объект, индикатор работает очень медленно.
Вторая версия (17_8_2020_RS_Indicator.mq4) хранит все уровни в буфере, который работает намного быстрее, но у меня есть проблемы, которые я не могу исправить.
---- я полагаю, что у меня есть логическая ошибка в сохранении нового уровня фрактала, который некоторый уровень отображения не соответствовал требованию минимального расстояния и получил больше повторяющихся уровней при запуске в тестере.
слева — 17_8_2020_RS_Indicator.mq4, у которых есть дублированный уровень.
Выше дублируется уровень внутри тестера.
if (modify == false ) // store new level when display level limit have no more room
{
if (RSMode[limit]== 1 )
{
int index = ArrayMinimum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
if (RSMode[limit]== 2 )
{
int index = ArrayMaximum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
modify = true ;
}
}
Я думаю, что приведенный выше код может вызвать логическую ошибку. Но никто не может сказать, если они не готовы потратить время на просмотр всего файла.
Цените, если кто-нибудь может помочь. Ниже приведен полный код, вы можете скопировать и вставить или загрузить прикрепленный файл.
Большое спасибо.
//+------------------------------------------------------------------+//| MainRS_Indicator.mq4 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property description"Indicator to show Grouped Fractal Support and Resisitance Level"#property strict#property indicator_chart_window#property indicator_buffers2#define Confirm_Level 3#define Up_Fractal 1#define Down_Fractal 2#define Combined_Up 4#define Combined_Down 5enum timeframe_display_option
{
Current = 0 ,
PeriodM5 = 5 ,
PeriodM15 = 15 ,
PeriodM30 = 30 ,
PeriodH1 = 60 ,
PeriodH4 = 240 ,
PeriodD1 = 1440 ,
PeriodW1 = 10080 ,
};
double RSBuffer1[]; //hold new form fractaldouble RSMode[]; //hold new form fractal statusdouble Display_level[]; // hold fractal display level double Display_Mode[]; // hold fractal display level statusexternint Show_Level_Limit = 15 ; //Max Level to be display on chartextern timeframe_display_option Level_of_TimeFrame=Current; //Option to display which timeframe level on chartexterndouble sensitvity = 15 ; // Min distance between each RS level,input in pips valuesint DisplayIndex = 0 ;
//++++ These are adjusted for 5 digit brokers.int pips2points; // slippage 3 pips 3=points 30=pointsdouble pips2dbl; // Stoploss 15 pips 0.0015 0.00150int Digitspips; // DoubleToStr(dbl/pips2dbl, Digits.pips)string indId = "SR_" ; // string to name object on chart for delete and create objectdouble fractal; // to store fractal point valuebool modify = false ; // to indicate a existing level on chart being modify or notdouble status; // status of display level, use to reduce and combine level within min distancecolor mark = clrRed ;
//--------------------------------------------------//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit ()
{
if ( Digits % 2 == 1 )
{ // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
pips2dbl = Point * 10 ;
pips2points = 10 ;
Digitspips = 1 ;
}
else
{ pips2dbl = Point ;
pips2points = 1 ;
Digitspips = 0 ;
}
SetIndexBuffer ( 0 , RSBuffer1);
SetIndexStyle( 0 , DRAW_ARROW );
SetIndexArrow( 0 , 251 ); //buffer 0 draw line not symbol
SetIndexEmptyValue( 0 , 0.0 );
SetIndexBuffer ( 1 , RSMode);
SetIndexStyle( 1 , DRAW_NONE );
SetIndexArrow( 1 , 251 ); //buffer 0 draw line not symbol
SetIndexEmptyValue( 1 , 0.0 );
sensitvity = sensitvity * pips2dbl; // min distance of each display level/fractal pointreturn ( 0 );
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
DeleteAllObjects();
return ( 0 );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
int counted_bars=IndicatorCounted();
if (counted_bars > 0 ) //---- the last calculated bar will be recalculated
counted_bars--;
int limit = Bars - counted_bars- 1 ;
//------------------------------------------------------------------------------------------------- //---- store fractal point to array //------------------------------------------------------------------------------------------------- while (limit> 0 )
{
fractal = iFractals ( NULL , Level_of_TimeFrame, MODE_UPPER, limit);
if (fractal != 0 )
{
RSBuffer1[limit]= fractal;
RSMode[limit]= Up_Fractal;
}
fractal = iFractals ( NULL , Level_of_TimeFrame, MODE_LOWER, limit);
if (fractal != 0 )
{
RSBuffer1[limit]= fractal;
RSMode[limit]= Down_Fractal;
}
//----------------------------------------------------------------------------------------------------------------------------------------------- //below status for fractal point reduction //Confirm_Level 3//Up_Fractal 1//Down_Fractal 2//Combined_Up 4//Combined_Down 5//upper fractal point with another upper fractal point == combined up//lower fractal point with another lower fractal point == combine down//opposite fractal merge == confirm level (up & down || up & combine down || up && confirm || down & up || down & combine up ||down && confirm)//--------------------------------------------------------------------------------------------------------------------------------------------------ArrayResize (Display_level,Show_Level_Limit+ 1 );
ArrayResize (Display_Mode,Show_Level_Limit+ 1 );
if ( RSBuffer1[limit]!= 0 )
{
for ( int i=Show_Level_Limit- 1 ; i>= 0 ; i--)
{
double diff = MathAbs (RSBuffer1[limit]-Display_level[i]); // calculate min distance between level
modify = false ;
if (diff<=sensitvity ) //new fractal, check against Displaylevel
{
if (Display_Mode[i]== 1 && RSMode[limit] == 1 ) //
{
Display_Mode[i]= 4 ; // mode up & up = combine upif (RSBuffer1[limit]<Display_level[i])
Display_level[i]=Display_level[i];
Comment ( " Up & Up== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
if (Display_Mode[i]== 4 && RSMode[limit] == 1 )
{
Display_Mode[i]= 4 ; // mode combine up & up = combine upif (RSBuffer1[limit]<Display_level[i])
Display_level[i]=Display_level[i];
Comment ( " Up & combine Up== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
if (Display_Mode[i]== 2 && RSMode[limit] == 2 )
{
Display_Mode[i]= 5 ; // mode down & down = combine downif (RSBuffer1[limit]>Display_level[i])
Display_level[i]=Display_level[i];
Comment ( "down & down== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
if (Display_Mode[i]== 5 && RSMode[limit] == 2 )
{
Display_Mode[i]= 5 ; // mode down & combine down = combine downif (RSBuffer1[limit]>Display_level[i])
Display_level[i]=Display_level[i];
Comment ( " Down & combine down== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
}
if (diff<=sensitvity)
{
if ((Display_Mode[i]== 2 && RSMode[limit] == 1 )||(Display_Mode[i]== 1 && RSMode[limit] == 2 ))
{
Display_Mode[i]= 3 ; // mode up & down & combine down = confirm
Display_level[i]=Display_level[i];
Comment ( "Up & down or combine down == " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
modify = true ;
break ;
}
if ( (Display_Mode[i]== 3 || Display_Mode[i]== 5 ))
{
Display_Mode[i]= 3 ; // mode up & confirm level = confirm
Display_level[i]=Display_level[i];
Comment ( "Up & confirm level== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
modify = true ;
break ;
}
if ( Display_Mode[i]== 3 || Display_Mode[i]== 4 )
{
Display_Mode[i]= 3 ; // mode down & confirm level = confirm
Display_level[i]=Display_level[i];
Comment ( "Down & confirm level== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
modify = true ;
break ;
}
}
} //end of modify existing level for loop if (modify == false ) // store disply level untill reacah show level limit
{
for ( int a= 0 ; a<Show_Level_Limit- 1 ; a++)
{
if (Display_Mode[a]== 0 )
{
Display_Mode[a]=RSMode[limit];
Display_level[a] = RSBuffer1[limit];
modify = true ;
break ;
}
a++;
}
if (modify == false ) // store new level when display level limit have no more room
{
if (RSMode[limit]== 1 )
{
int index = ArrayMinimum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
if (RSMode[limit]== 2 )
{
int index = ArrayMaximum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
modify = true ;
}
}
}
limit--;
}
DeleteAllObjects();
int uplevel= 1 ;
int downlevel= 1 ;
ArraySort (Display_level, WHOLE_ARRAY , 0 ,MODE_ASCEND);
DisplayIndex = 0 ;
for ( int a= 0 ;a< ArraySize (Display_level)- 1 ; a++)
{
if (Display_level[a]<Bid && Display_level[a+ 1 ]>Bid)
DisplayIndex =a+ 1 ;
}
for ( int c =DisplayIndex ; c<=Show_Level_Limit; c++)
{
HLine( "SR_RES" +uplevel+ " # " + c, Display_level[c],mark);
uplevel++;
}
for ( int c =DisplayIndex- 1 ; c> 0 ; c--)
{
HLine( "SR_SUP" +downlevel+ " # " + c, Display_level[c],mark);
downlevel++;
}
return ( 0 );
}
void HLine( string name, double P0, color clr)
{
#define WINDOW_MAIN 0/**/if ( ObjectMove ( name, 0 , Time[ 0 ], P0 )){}
elseif (! ObjectCreate ( name, OBJ_HLINE , WINDOW_MAIN, Time[ 0 ], P0 ))
Alert ( "ObjectCreate(" ,name, ",HLINE) failed: " , GetLastError () );
if (!ObjectSet(name, OBJPROP_COLOR , clr )) // Allow color changeAlert ( "ObjectSet(" , name, ",Color) [1] failed: " , GetLastError () );
if (!ObjectSetText(name, PriceToStr(P0), 10 ))
Alert ( "ObjectSetText(" ,name, ") [1] failed: " , GetLastError ());
}
void DeleteAllObjects()
{
// Delete all objects created by the indicatorfor ( int i = ObjectsTotal () - 1 ; i >= 0 ; i--)
{
string name = ObjectName (i);
if ( StringSubstr (name, 0 , StringLen (indId)) == indId)
ObjectDelete (name);
}
}
string PriceToStr( double p)
{
string pFrc = DoubleToStr(p, Digits );
if (Digitspips== 0 )
return (pFrc);
string pPip = DoubleToStr(p, Digits - 1 );
if (pPip+ "0" == pFrc)
return (pPip);
return (pFrc);
}
//--------------------------------------------------------------------------------------------- double Price( double Old, double New, int result) //1 return larger value, 2 return smaller value
{
double value= 0 ;
if (result== 1 )
value= MathMax (Old,New);
if (result== 2 )
value= MathMin (Old,New);
return (value);
}
//---------------------------------------------------------------------------------------------
Просто надеюсь, что кто-нибудь сможет указать на ошибку, которую я допустил в своем коде, чтобы я мог исправить проблему с дублированием уровня дисплея.
Но мне нужны стоплосс и цели также в оповещении, основанном на следующем простом расчете.
Предположим, что мы вошли в покупку по цене 524.55.
Стоплосс: Вход - 1.5% от цены входа в рынок (524.55 - 7.85 = 516.70).
Цель 1: Вход + 2,5% от цены входа (524,55 + 13,10 = 537,65)
Цель 2: Вход + 5% от цены входа в акции (524.55 + 26.20 = 550.75)
(Примечание: Размер тика составляет 0,05. Поэтому, если стоплосс или цель вычисляется в нечетном числе, необходимо округлить до ближайшего размера тика. А если LSignal является сигналом на продажу, необходимо произвести обратный расчет.
Наконец, мне нужен следующий вывод:
Название символа (15M) --> Покупка по цене 524.55, SL: 516.70, Цель 1: 537.65, Цель 2: 550.75.
Не мог бы кто-нибудь переписать код под мои требования?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Не делайте двойных сообщений! Вы уже открывали эту тему.
Общие правила и лучшие практики форума. - Общие - Форум по программированию на MQL5
"Не работает" бессмысленно - все равно что сказать, что машина не работает. Не заводится, не включается передача, нет электричества, пропал ключ, спущенные шины - бессмысленно.
Как задавать вопросы по-умному. 2004
При вопросе о коде
Я удалил вашу тему с тем же вопросом.
Не захламляйте другие темы своими сообщениями не по теме. Вы не просите "помощи в кодировании". В следующий раз создайте свою собственную, новую тему.
Вы действительно ожидаете ответа? Здесь нет читающих мысли, и наши хрустальные шары треснуты. Мы не можем видеть ваш сломанный код. Нет никакого контекста для вашей одной строки. Ваша проблема, скорее всего, выше этого.
Опубликуйте сообщения об ошибках и укажите, в какой строке возникла ошибка.
Как задавать вопросы умным способом. 2004
Отсеивайте бессмысленные запросы.
Все символы доступны на моих платформах.
Пробовал с 3 разными индикаторами ренко и на трех разных платформах, но все равно ничего не работает на графиках ренко.
Все остальные индикаторы работают правильно, это CCI, RSI и stochs.
Есть ли у кого-нибудь еще какие-нибудь предложения?
TEAMTRADER
Здравствуйте Auto_free_Teamleader
У меня такая же проблема, если вы нашли решение, пожалуйста, ответьте.
Здравствуйте, Auto_free_Teamleader
У меня такая же проблема, если вы нашли решение, пожалуйста, ответьте.
Всем привет,
Я потратил 3 недели на создание пользовательского индикатора, но явно недостаточно хорош, надеясь, что кто-то сможет помочь.
У моего индикатора 3 внешних параметра: "Таймфрейм", "Номер отображаемого уровня на графике" и "Минимальное расстояние между каждым уровнем".
Все, что мне нужно для кода, это сгруппировать, удалить фрактальную точку на минимальном расстоянии, а затем отобразить оставшийся уровень фрактальной точки.
Первая версия (MainRS_AddOn2.mq4), которую я создал, делает именно то, что я хочу, однако я использую глупый метод, рисуя объект и продолжая изменять объект, индикатор работает очень медленно.
Вторая версия (17_8_2020_RS_Indicator.mq4) хранит все уровни в буфере, который работает намного быстрее, но у меня есть проблемы, которые я не могу исправить.
---- я полагаю, что у меня есть логическая ошибка в сохранении нового уровня фрактала, который некоторый уровень отображения не соответствовал требованию минимального расстояния и получил больше повторяющихся уровней при запуске в тестере.
слева — 17_8_2020_RS_Indicator.mq4, у которых есть дублированный уровень.
Выше дублируется уровень внутри тестера.
Я думаю, что приведенный выше код может вызвать логическую ошибку. Но никто не может сказать, если они не готовы потратить время на просмотр всего файла.
Цените, если кто-нибудь может помочь. Ниже приведен полный код, вы можете скопировать и вставить или загрузить прикрепленный файл.
Большое спасибо.
Приношу извинения, если я помешалдругим темам.
Просто надеюсь, что кто-нибудь сможет указать на ошибку, которую я допустил в своем коде, чтобы я мог исправить проблему с дублированием уровня дисплея.
Большое спасибо
Я пытаюсь перейти с MQL4 на MQL5, но застрял на первом шаге. для функции iCCI, почему больше нет параметра "shift"?
Пожалуйста, отредактируйте ваше сообщение и
используйте кнопку "код" (Alt+S) при вставке кода.
Этот раздел относится к MQL4.
В MQL5 вы создаете хэндл в OnInit и обращаетесь к значениям буфера в основном коде.
Советую вам прочитать документацию по MQL5
Пожалуйста, отредактируйте свое сообщение и
используйте кнопку кода (Alt+S) при вставке кода.
Этот раздел относится к MQL4.
В MQL5 вы создаете хэндл в OnInit и обращаетесь к значениям буфера в основном коде.
Я рекомендую вам прочитать документацию по MQL5