MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1536

 
MakarFX :

이것을 시도하십시오. 작동해야합니다.

아니요. 지속적으로 경고음이 울립니다. 다음은 전체 코드와 칠면조입니다. 내가 뭔가 잘못하고 있는 걸지도 몰라

 //+------------------------------------------------------------------+
//|                                                          777.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
//--- plot Покупаем
#property indicator_label1    "Продаём"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- plot Продаём
#property indicator_label2    "Покупаем"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrBlue
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1
//--- input parameters
double       Buy[];             // Буфер для покупок
double       Sell[];           // Буфер для продаж


int OnInit ()
  {
//--- indicator buffers mapping
     SetIndexBuffer ( 0 ,Buy);
   SetIndexBuffer ( 1 ,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue ( 0 , 0 );
   SetIndexEmptyValue ( 1 , 0 );
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle ( 0 , DRAW_ARROW );
   SetIndexStyle ( 1 , DRAW_ARROW ); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow( 0 , 234 );   //Стрелка "вниз" для продаж
   SetIndexArrow( 1 , 233 );   //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel( 0 , "Продаём" );
   SetIndexLabel( 1 , "Покупаем" );
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits ( Digits );
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ( "Мой первый индикатор" );
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
 

     int limit=rates_total-prev_calculated- 2 ;
   if (limit< 1 ) return ( 0 );
   for ( int i=limit;i>= 0 ;i--)
     {
     
       // Снимем показания индикатора
     double in1b = iCustom ( NULL , 0 , "in1" , 1 ,i+ 1 ); // индикатор 1 стрелка вверх
     double in1s = iCustom ( NULL , 0 , "in1" , 0 ,i+ 1 ); // индикатор 1 стрелка вниз
      
     
     
     double in2b = iCustom ( NULL , 0 , "in2" , 0 ,i+ 1 ); // индикатор 2 стрелка вверх
     double in2s = iCustom ( NULL , 0 , "in2" , 1 ,i+ 1 ); // индикатор 2 стрелка вниз
    
     Comment ( "in1v = " + DoubleToString (in1b)+ "\n" + "in1n = " + DoubleToString (in1s)+ "\n"
    + "in2v = " + DoubleToString (in2b)+ "\n" + "in2n = " + DoubleToString (in2s));
     
     if (in1b < 2147483647 && in2b < 2147483647 ) // индикатор стрелка вверх
        {
         Sell[i]=low[i];
       /*  if(show_alert!=time[i])
           {
            Alert(Symbol()+"BUY М "); show_alert=time[i];
           }*/
        }
   
       if (in1s < 2147483647 && in2s < 2147483647 ) // индикатор стрелка вниз
        {
         Buy[i]=high[i];
         /* if(show_alert!=time[i])
           {
            Alert(Symbol()+"SELL М "); show_alert=time[i];
           }*/
        }
     }
     
   
     
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
파일:
in1.ex4  13 kb
in2.ex4  28 kb
 
jarikn :
얘들아, 내가 지표에 경보를 울리도록 도와줘. 여러 지표의 조합을 테스트하고 싶지만 경고 기능이 필요합니다. 화살표가 나타날 때 경고가 한 번만 표시되어야 합니다 . 당신에게 어렵지 않다면 그런 기능을 작성하는 것을 도와주세요. 그렇지 않으면 저에게 작동하지 않습니다. MT4가 멈추는 만큼 1분 또는 항상 경고가 나타납니다.


변수 추가

신호가 없으면 변수가 false가 됩니다.

if (신호 및 변수== false ) {

알리다;

변수=참;

}

 
Andrey Sokolov :


변수 추가

새 양초 가 나타나면 변수가 false가 됩니다.

if (신호 및 변수== false ) {

알리다;

변수=참;

}

양초당 1개 이하일 것

확인. 고맙습니다

 
jarikn :

확인. 고맙습니다

나는 그곳에서 변했다.

 
질문 하나 더. 이 표시기가 프로세서에 과부하를 일으키는 이유는 무엇입니까? 당신은 10개의 통화 쌍과 MT4가 어떻게 매달리는지 열었습니다. 어떻게든 고칠 수 있습니까? 그리고 지표가 아니라 고문으로 하면 그렇게 느려질까요?
 
프로그래밍 방식으로 개체를 선택하는 방법을 알려주시겠습니까? 도움말에서 비슷한 것을 찾지 못했습니다.
 

안녕하세요! 표시기가 있습니다. 추세의 각도를 도 단위로 보여줍니다(정규화되지는 않음). 차트의 모든 것이 훌륭합니다. 최소한 각도 곡선(파란색), 중간 곡선(녹색) - 그림 1. 그러나 표시기가 이중 Custom = iCustom(Symbol(), 창, "Angle"을 통해 어드바이저로 호출될 때) , 0, 1), 그것은 넌센스를 생성합니다 - 일부 거대한 숫자 - 그림 2. 여기 창은 차트 기간, "각도"는 표시기의 이름, 0은 파란색 선이 계산되는 0 버퍼입니다. 1 - 녹색 MA 버퍼이지만 결과는 비슷함), 1 - 시프트. 무엇이 문제가 될 수 있습니까?

그림 1

그림 2

 
Tango_X :
프로그래밍 방식으로 개체를 선택하는 방법을 알려주시겠습니까? 도움말에서 비슷한 것을 찾지 못했습니다.

OBJPROP_SELECTED

개체 선택

mql5

mql4

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Свойства объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
나는 고문을 썼고 모든 것이 효과가 있는 것 같다. 그러나 사실은 주문이 이동 평균의 교차점에서 마감되어야 한다는 것입니다. 그러나 그들은 닫지 않거나 오히려 첫 번째 주문만 닫히고 어느 방향으로 가도 상관 없습니다. 그런 다음 로그에 오류 - OrderClose 오류 4051이 표시됩니다. 문제가 무엇입니까?
   //-----------------------------------------------------------
     if (CountSell() == 0 && mama1<mama2 && cci>verh && cci1>verh && cci<cci1)
      {
      tiket = OrderSend ( Symbol (), OP_SELL,Lots,Bid,Slippage, 0 , 0 , "" ,Magic, 0 , Red);
       if (tiket> 0 )
         {
         SL= NormalizeDouble (Bid+StopLoss* Point , Digits );
         TP= NormalizeDouble (Bid-TakeProfit* Point , Digits );
         if ( OrderSelect (tiket, SELECT_BY_TICKET))
             if (!OrderModify(tiket,OrderOpenPrice(),SL,TP, 0 ))
               Print ( "Ошибка модификации ордера на продажу" );
         } else Print ( "Ошибка открытия ордера на продажу" );
      }
     if (CountBuy() == 0 && mama1>mama2 && cci<nuz && cci1<nuz && cci>cci1)
      {
      tiket = OrderSend ( Symbol (), OP_BUY,Lots,Ask,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue);
       if (tiket> 0 )
         {
         SL= NormalizeDouble (Ask-StopLoss* Point , Digits );
         TP= NormalizeDouble (Ask+TakeProfit* Point , Digits );
         if ( OrderSelect (tiket, SELECT_BY_TICKET))
           if (!OrderModify(tiket,OrderOpenPrice(),SL,TP, 0 ))
           Print ( "Ошибка модификации ордера на покупку" );
         } else Print ( "Ошибка открытия ордера на покупку" );
      }  
      
       if (mama1>mama2 && CountSell()> 0 )
      {
         for ( int i = OrdersTotal () - 1 ;i>= 0 ; i--)
         {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
            {
             if (OrderMagicNumber()==Magic && OrderType()==OP_SELL)
            OrderClose(OrderType(),OrderLots(),Ask,Slippage,Black);
            }
         }
         
      }
       if (mama1<mama2 && CountBuy()> 0 )
      {
         for ( int i = OrdersTotal () - 1 ;i>= 0 ; i--)
         {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
            {
             if (OrderMagicNumber()==Magic && OrderType()==OP_BUY)
            OrderClose(OrderType(),OrderLots(),Bid,Slippage,Black);
            }
         }
         
      }
 
Tango_X :
프로그래밍 방식으로 개체를 선택하는 방법을 알려주시겠습니까? 도움말에서 비슷한 것을 찾지 못했습니다.

표준 객체 생성 기능을 사용하는 경우 기본 매개변수에서 selection = true입니다. 예를 들어 추세선의 경우 아래에서 4번째 줄:

 bool TrendCreate( const long             chart_ID = 0 ,       // ID графика
                 const string           name = "TrendLine" , // имя линии
                 const int              sub_window = 0 ,     // номер подокна
                 datetime               time1 = 0 ,         // время первой точки
                 double                 price1 = 0 ,         // цена первой точки
                 datetime               time2 = 0 ,         // время второй точки
                 double                 price2 = 0 ,         // цена второй точки
                 const color            clr = clrRed ,       // цвет линии
                 const ENUM_LINE_STYLE style = STYLE_SOLID , // стиль линии
                 const int              width = 4 ,         // толщина линии
                 const bool             back = false ,       // на заднем плане
                 const bool             selection = true , // выделить для перемещений
                 const bool             ray_right = false , // продолжение линии вправо
                 const bool             hidden = true ,     // скрыт в списке объектов
                 const long             z_order = 0 )       // приоритет на нажатие мышью