Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2241

 
Alexey Viktorov #:

Почему никак?

Ого)))

Благодарю Вас!

 
Alexey Viktorov #:

Почему никак?



Ну так нет текущих. Лишь значения
 
Artyom Trishkin #:
Ну так нет текущих. Лишь значения

Мне визуально нужно было убрать, чтобы не видно было. 

 
//+------------------------------------------------------------------+
//|                                                          bid.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property description "Скрипт строит графический объект \"Горизонтальная линия\"." 
#property description "Цена точки привязки задается в процентах от высоты" 
#property description "окна графика."
#property script_show_inputs 


string     name;
double     p;
int        i=0;

MqlTick last_tick; 
  
void OnTick()
{ 


SymbolInfoTick(Symbol(),last_tick);  

Comment("Bid = ", last_tick.ask,
        "\n","тик = ", i );
        
ObjectCreate(0, "name", OBJ_HLINE, 0, 0, last_tick.ask);

if(i=0)
{
p=last_tick.ask;
ObjectCreate(0, "sl", OBJ_HLINE, 0, 0, p+0.0003);
}

i++;

if(i=10) i=0;

}


Здравствуйте. Подскажите  пожалуйста почему код не работает?
Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.08.14
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
EfremovSergey #:


Здравствуйте. Подскажите  пожалуйста почему код не работает?
Компилятор не пропустит такой код! Как же он может работать? Журнал с ошибками смотреть надо.
 
Tretyakov Rostyslav #:
Компилятор не пропустит такой код! Как же он может работать? Журнал с ошибками смотреть надо.

Компилятор ошибок не выдаёт, но из всего кода работает только одна строчка, в комменты last_tick.ask выводится, а i не выводится, отображается 0, что необходимо исправить подскажите пожалуйста.

ObjectCreate(0, "name", OBJ_HLINE, 0, 0, last_tick.ask);


 
EfremovSergey #:

Компилятор ошибок не выдаёт, но из всего кода работает только одна строчка, в комменты last_tick.ask выводится, а i не выводится, отображается 0, что необходимо исправить подскажите пожалуйста.


Посмотрите внимательно ваш код.

У вас написано:

если i равно 0

что-то сделать

и сразу увеличить значение i на 1 —————————————————

На следующем тике i уже не равна 0



Дальше самостоятельно…

 
EfremovSergey #:

Компилятор ошибок не выдаёт, но из всего кода работает только одна строчка, в комменты last_tick.ask выводится, а i не выводится, отображается 0, что необходимо исправить подскажите пожалуйста.


У Вас ошибка в коде вот здесь 

if(i=...) 


Оператор в скобках не сравнивает, а присваивает. "=" - это присваивание, а нужно "==", это сравнение. 


 

Подскажите, пожалуйста, почему стрелки разбрасывает по всему графику?



Код ищет 5 и 7-барные фракталы, потом записывает в буферы. Вроде ничего особенного, но поведение странное. 


//+------------------------------------------------------------------+
//| ReversalFractals.mq4
//| -----------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue                
#property indicator_color2 Red                 
#define IName              "ReversalFractals"

//-------------------------------
// Input parameters
//-------------------------------
extern bool CalculateOnBarClose    = false;
input bool SendPushAlert = true, SendEmail = false, SenPopupAlert = true;
//-------------------------------
// Buffers
//-------------------------------
double ExtMapBuffer1[];                         
double ExtMapBuffer2[];                         
//-------------------------------
// Internal variables
//-------------------------------
double last_signal = 0;
double last_action = OP_BUY;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){  
    IndicatorDigits(Digits);
    SetIndexStyle(0, DRAW_ARROW, STYLE_DOT, 1);
    SetIndexArrow(0, 233);
    SetIndexBuffer(0, ExtMapBuffer1);
    SetIndexStyle(1, DRAW_ARROW, STYLE_DOT, 1);
    SetIndexArrow(1, 234);
    SetIndexBuffer(1, ExtMapBuffer2);
    IndicatorShortName("Reversal Fractals");
    SetIndexLabel(0, "Bullish reversal");
    SetIndexLabel(1, "Bearish reversal"); 
    return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
    
  }
//+------------------------------------------------------------------+
//| 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[])
  {  
    
    ArraySetAsSeries(high, true);
    ArraySetAsSeries(low, true);
    
    int Start = 0;
    int limit;
    if(prev_calculated < 0) return(-1);
    limit = rates_total - 1 - prev_calculated;
    
    // Check if ignore bar 0
    if(CalculateOnBarClose == true) Start = 1;
    
    // Check the signal foreach bar from past to present
    for(int i = limit; i >= Start; i--)
      {
        double upper_fractal_5b;
        double upper_fractal_7b;
        double lower_fractal_5b;
        double lower_fractal_7b;
        
        // Проверяем наличие 7-барного фрактала ВВЕРХ
        
        double middle = high[i + 3];
        double v1 = high[i];
        double v2 = high[i + 1];
        double v3 = high[i + 2];
        double v5 = high[i + 4];
        double v6 = high[i + 5];
        double v7 = high[i + 6];
        double v1_c = low[i];
        double v7_c = low[i + 5];
        if((middle > v1 && middle > v2 && middle > v3 && middle > v5 && middle > v6 && middle > v7) && (v1_c < v7_c))
          {
            upper_fractal_7b = middle;
          } 
        else upper_fractal_7b = 0;
        
        //------------- Проверяем наличие 7-барного фрактала ВНИЗ -------------
        
        middle = low[i + 3];
        v1 = low[i];
        v2 = low[i + 1];
        v3 = low[i + 2];
        v5 = low[i + 4];
        v6 = low[i + 5];
        v7 = low[i + 6];
        v1_c = high[i];
        v7_c = high[i + 5];
        if((middle < v1 && middle < v2 && middle < v3 && middle < v5 && middle < v6 && middle < v7) && (v1_c > v7_c))
          {
            lower_fractal_7b = middle;
          } 
        else lower_fractal_7b = 0;        
        
        //------------- Проверяем наличие 5-барного фрактала ВВЕРХ -------------
        
        middle = high[i + 2];
        v1 = high[i];
        v2 = high[i+1];
        v3 = high[i + 3];
        double   v4 = high[i + 4];
        v1_c = low[i];
        double   v4_c = low[i + 3];
        if((middle > v1 && middle > v2 && middle > v3 && middle > v4) && (v1_c < v4_c))
          {
            upper_fractal_5b = middle;
          } 
        else upper_fractal_5b = 0;
        
        // ------------- Проверяем наличие 5-барного фрактала ВНИЗ -------------
        
        middle = low[i + 2];
        v1 = low[i];
        v2 = low[i+1];
        v3 = low[i + 3];
        v4 = low[i + 4];
        v1_c = high[i];
        v4_c = high[i + 3];
        if((middle < v1 && middle < v2 && middle < v3 && middle < v4)  && (v1_c > v4_c))
          {
            lower_fractal_5b = middle;
          } 
        else lower_fractal_5b = 0;
        
       
            
        // Если 5-барный фрактал ВНИЗ
        if(lower_fractal_5b != 0 && lower_fractal_5b != last_signal && last_action == OP_SELL)
        {
            ExtMapBuffer1[i+2] = lower_fractal_5b;
            last_signal = lower_fractal_5b;
            last_action = OP_BUY;
        } 
        
        // Или 7-барный фрактал ВНИЗ
        else if(lower_fractal_7b != 0&& lower_fractal_7b != last_signal && last_action == OP_SELL)
          {
            ExtMapBuffer1[i+3] = lower_fractal_7b;
            last_signal = lower_fractal_7b;
            last_action = OP_BUY;
          }
        
        // Или 5-барный фрактал ВВЕРХ
        else if(upper_fractal_5b != 0 && upper_fractal_5b != last_signal && last_action == OP_BUY)
          {
            ExtMapBuffer2[i+2] = upper_fractal_5b;
            last_signal = upper_fractal_5b;
            last_action = OP_SELL;
          } 
          
        // Или 7-барный фрактал ВВЕРХ
        else if(upper_fractal_7b != 0&& upper_fractal_7b != last_signal && last_action == OP_BUY)
          {
            ExtMapBuffer2[i+3] = upper_fractal_7b;
            last_signal = upper_fractal_7b;
            last_action = OP_SELL;
          }   
      }
    
    return(rates_total);
  }


 
Ivan Butko #:

Подскажите, пожалуйста, почему стрелки разбрасывает по всему графику?



Код ищет 5 и 7-барные фракталы, потом записывает в буферы. Вроде ничего особенного, но поведение странное. 




Прежде, чем рассчитывать буфер, его нужно заполнить пустым значением. 
Причина обращения: