Помощь в кодировании - страница 782

 
  1. Не делайте двойных сообщений! Вы уже открывали эту тему.
    Общие правила и лучшие практики форума. - Общие - Форум по программированию на MQL5

  2. mcaesart: Но он не работает так, как я хочу.

    "Не работает" бессмысленно - все равно что сказать, что машина не работает. Не заводится, не включается передача, нет электричества, пропал ключ, спущенные шины - бессмысленно.
    Как задавать вопросы по-умному. 2004
    При вопросе о коде

 
mcaesart

Я удалил вашу тему с тем же вопросом.

 
KristijanO: Я получаю много ошибок... Я получаю ошибку неожиданного токена.
  1. Не захламляйте другие темы своими сообщениями не по теме. Вы не просите "помощи в кодировании". В следующий раз создайте свою собственную, новую тему.

  2. Вы действительно ожидаете ответа? Здесь нет читающих мысли, и наши хрустальные шары треснуты. Мы не можем видеть ваш сломанный код. Нет никакого контекста для вашей одной строки. Ваша проблема, скорее всего, выше этого.

  3. Опубликуйте весь релевантный код (например, что находится выше этой строки).
  4. Опубликуйте сообщения об ошибках и укажите, в какой строке возникла ошибка.

  5. Как задавать вопросы умным способом. 2004
    Отсеивайте бессмысленные запросы.

 
auto_free_TEAMTRADER:

Все символы доступны на моих платформах.

Пробовал с 3 разными индикаторами ренко и на трех разных платформах, но все равно ничего не работает на графиках ренко.

Все остальные индикаторы работают правильно, это CCI, RSI и stochs.

Есть ли у кого-нибудь еще какие-нибудь предложения?

TEAMTRADER

Здравствуйте Auto_free_Teamleader


У меня такая же проблема, если вы нашли решение, пожалуйста, ответьте.

 
Rex Kalist:

Здравствуйте, Auto_free_Teamleader


У меня такая же проблема, если вы нашли решение, пожалуйста, ответьте.

auto_free_TEAMTRADER или Младен, помогите пожалуйста
 

Всем привет,

Я потратил 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_buffers 2
#define Confirm_Level 3
#define Up_Fractal   1
#define Down_Fractal   2
#define Combined_Up   4
#define Combined_Down   5
 
enum timeframe_display_option
   {
    Current = 0 ,
    PeriodM5 = 5 ,
    PeriodM15 = 15 ,
    PeriodM30 = 30 ,
    PeriodH1 = 60 ,
    PeriodH4 = 240 ,
    PeriodD1 = 1440 ,
    PeriodW1 = 10080 ,
   };
double RSBuffer1[]; //hold new form fractal
double RSMode[]; //hold new form fractal status
double Display_level[]; // hold fractal display level 
double Display_Mode[]; // hold fractal display level status

extern int                        Show_Level_Limit = 15 ;         //Max Level to be display on chart
extern timeframe_display_option  Level_of_TimeFrame=Current; //Option to display which timeframe level on chart
extern double                     sensitvity = 15 ;     // Min distance between each RS level,input in pips values
int DisplayIndex = 0 ;


//++++ These are adjusted for 5 digit brokers.
   int      pips2points;     // slippage  3 pips    3=points    30=points
   double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
   int      Digitspips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)
   string indId = "SR_" ;     // string to name object on chart for delete and create object
   double fractal;         // to store fractal point value
   bool modify = false ;     // to indicate a existing level on chart being modify or not
   double status; // status of display level, use to reduce and combine level within min distance
   color mark = clrRed ;                 

   //--------------------------------------------------
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
                                            
     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 point
     return ( 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 up
                                 if (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 up
                                     if (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 down
                                   if (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 down
                                     if (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 )){}
             else if (! ObjectCreate ( name, OBJ_HLINE , WINDOW_MAIN, Time[ 0 ], P0 ))
                     Alert ( "ObjectCreate(" ,name, ",HLINE) failed: " , GetLastError () );
           if (!ObjectSet(name, OBJPROP_COLOR , clr )) // Allow color change
                   Alert ( "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 indicator
   for ( 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);
   }
//---------------------------------------------------------------------------------------------   
Файлы:
 

Приношу извинения, если я помешалдругим темам.

Просто надеюсь, что кто-нибудь сможет указать на ошибку, которую я допустил в своем коде, чтобы я мог исправить проблему с дублированием уровня дисплея.

Большое спасибо

 
wccmcd:

Я пытаюсь перейти с MQL4 на MQL5, но застрял на первом шаге. для функции iCCI, почему больше нет параметра "shift"?

Пожалуйста, отредактируйте ваше сообщение и

используйте кнопку "код" (Alt+S) при вставке кода.

Этот раздел относится к MQL4.

В MQL5 вы создаете хэндл в OnInit и обращаетесь к значениям буфера в основном коде.

Советую вам прочитать документацию по MQL5

 
Keith Watford:

Пожалуйста, отредактируйте свое сообщение и

используйте кнопку кода (Alt+S) при вставке кода.

Этот раздел относится к MQL4.

В MQL5 вы создаете хэндл в OnInit и обращаетесь к значениям буфера в основном коде.

Я рекомендую вам прочитать документацию по MQL5

Извините за это. Я только что поняла, что написала не туда. Спасибо за ваш ответ. Я просто удалила его.
 
Здравствуйте,
Я только начинаю изучать mql4. Я пытаюсь создать базовый индикатор супертренда.
Мне нужна помощь эксперта в отношении кода алертов.


Текущий код алерта:
Alert(Symbol() + " (" + Period() + "M) --> " + LSignal + CPri);

Выходные данные выглядят следующим образом:
Название символа (15M) --> Покупка по цене 524.55

Но мне нужны стоплосс и цели также в оповещении, основанном на следующем простом расчете.

Предположим, что мы вошли в покупку по цене 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.


Не мог бы кто-нибудь переписать код под мои требования?

Заранее спасибо.
Причина обращения: