MQL 전문가를 위한 질문 - 페이지 8

 
Rita :
설명 해주셔서 감사합니다.


여러 기능을 하나로 합쳐야 할 것 같습니다. 어딜가나 논리는 똑같다

 

-안녕하세요.

이전 Expert Advisor에서 우리는 다음과 같은 직위 공개를 사용했습니다(I.Kim의 기능).

 if (NumberOfPositions( NULL ,OP_BUY,Magic1)< 1 ) { //если нет откр. позиций
  ti=OpenPosition( NULL ,OP_BUY, Lots, 0 , 0 ,Magic1);
                                              } 
} } //если условия соответствуют заданным      

이제 다른 어드바이저를 작성할 때 이 코드를 복사합니다.

그리고 갑자기 나는 컴파일 할 때 얻는다.

왜 오류가 나오는지 알 수 없습니다! 코드는 엄격하게 균형을 이룹니다.

뿐만 아니라! (전역 변수로 선언된) 매개변수 ti 를 제거하면 컴파일 오류가 사라집니다.

 if (NumberOfPositions(Symbol_1,-1, MagicNumber) ==1  && 
     NumberOfPositions(Symbol_2,-1, MagicNumber) <1 ) {
//если есть открытая позиция 1 символа, - открываем позицию второго символа: 
//ti=
  OpenPosition(Symbol_2,Positions_Symbol_2, Lots_1,0 ,0,MagicNumber);
                                                          }

 //if ( ti>0 )  
 //MessageBox("Позиции открыты! Не забудьте отключить Start_Trade",0,1 );

그러나 나중에 f- 및 MessageBox 실행을 구현할 수 있도록 티켓( ti )과 함께 필요합니다.

아침에는 알 수가 없습니다. 제발. 말해봐, 여기서 부정확성은 무엇인가?

OpenPosition( - 갑자기 오류가 발생하기 전에 ti= 를 추가하는 이유는 무엇입니까?


 

아마도 OpenPosition()은 void로 선언되지만 int여야 합니다.

 int OpenPosition(....){

....

}
 

정수 감사합니다!

네, 바로 그 일이 일어났습니다! 이제 수정했고 모든 것이 잘 컴파일되었습니다!

 

안녕하세요.

Expert Advisor에서 특별한 이유 없이 갑자기 모든 틱마다 로그가 인쇄되기 시작했습니다.

2012.01.11 22:28:19 Complex_Common_01mod EURCHF,H1: ObjectCreate 함수 에 대해 알 수 없는 하위 창 번호 -1

코드에서 사용자 정의 칠면조를 호출합니다(그림 참조).

 //-------------- задаем значения индикатора Complex_Common по первому символу  --------
   double Complex_1_1= iCustom ( NULL ,Tf, "Complex_Common_01mod" ,Period_low,Period_fast,m, 0 ); 
 //---------------задаем значения индикатора Complex_Common по второму символу ------------ 
   double Complex_1_2= iCustom ( NULL ,Tf, "Complex_Common_01mod" ,Period_low,Period_fast,n, 0 ); 

제발. 오류가 어디에서 왔는지 말해줘? 이전에는 존재하지 않았습니다. 약간의 코드 변경 - 표시 부분은 전혀 건드리지 않았습니다!

그리고 각 진드기의 로그는이 비문을 발행하기 시작했습니다 ...

ObjectCreate 함수 - 코드에서 전혀 사용하지 않습니다.

 
표시기는 해당 창의 이름을 찾지만 찾지 못합니다. https://docs.mql4.com/en/customind/IndicatorShortName 참조
 
Rita :

정수 감사합니다!

네, 바로 그 일이 일어났습니다! 이제 수정했고 모든 것이 잘 컴파일되었습니다!

다만, 티켓을 받기 위해서는 Kim의 기능을 정제해야 합니다.
 
FAQ :
표시기는 해당 창의 이름을 찾지만 찾지 못합니다. https://docs.mql4.com/en/customind/IndicatorShortName 참조


이것이 표시기의 결함으로 밝혀졌습니까? 고문의 잘못은 전혀 아닙니까? 이걸로 무엇을 해야 할지 잘 모르겠습니다. 나는 고문의 코드에서이 칠면조의 창을 호출하도록 요구하지 않습니다!

어렵지 않다면 부탁드립니다. 누군가이 결함을 수정하는 방법을 알려주십시오. (- ObjectCreate 함수에 대한 알 수 없는 하위 창 번호 -1 ) ?

표시기 코드는 다음과 같습니다.

 #property copyright "SemSemFX@rambler.ru"
#property link       "http://onix-trade.net/forum/index.php?showtopic=107"
//индикатор  Complex_Common_01mod 

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Lime
#property indicator_color2 DodgerBlue
#property indicator_color3 Red
#property indicator_color4 Magenta
#property indicator_color5 Aqua
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2
#property indicator_width5 2

extern int Period_low = 21 ;
extern int Period_fast = 8 ;
//---- buffers
double USD[];
double EUR[];
double GBP[];
double CHF[];
double JPY[];

int wndNum;                                 // Номер подокна индикатора
string wndName;                             // Наименование окна

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle ( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,USD);
   SetIndexLabel ( 0 , "USD" ); 
   SetIndexStyle ( 1 , DRAW_LINE );
   SetIndexBuffer ( 1 ,EUR);
   SetIndexLabel ( 1 , "EUR" ); 
   SetIndexStyle ( 2 , DRAW_LINE );
   SetIndexBuffer ( 2 ,GBP);
   SetIndexLabel ( 2 , "GBP" ); 
   SetIndexStyle ( 3 , DRAW_LINE );
   SetIndexBuffer ( 3 ,CHF);
   SetIndexLabel ( 3 , "CHF" ); 
   SetIndexStyle ( 4 , DRAW_LINE );
   SetIndexBuffer ( 4 ,JPY);
   SetIndexLabel ( 4 , "JPY" ); 
 
//----
   return ( 0 );
  }

int deinit()  {
   // Удаляем все графические объекты
  DeleteObject( "USD" ); 
  DeleteObject( "EUR" );
  DeleteObject( "GBP" );
  DeleteObject( "CHF" );
  DeleteObject( "JPY" ); 
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int limit;
     int counted_bars= IndicatorCounted ();
   //---- проверка на возможные ошибки
     if (counted_bars< 0 ) return (- 1 );
   //---- последний посчитанный бар будет пересчитан
     if (counted_bars> 0 ) counted_bars-= 10 ;
     limit= Bars -counted_bars;
   //---- основной цикл
       int Price= 6 ; int Mode= 2 ;
    
     for ( int i= 0 ; i<limit; i++)
       {
        USD[i]=
            ( iMA ( "EURUSD" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "EURUSD" , 0 ,Period_fast, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "GBPUSD" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "GBPUSD" , 0 ,Period_fast, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "USDCHF" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "USDCHF" , 0 ,Period_low, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "USDJPY" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "USDJPY" , 0 ,Period_low, 0 ,Mode,Price,i))* 100
            ;
        EUR[i]=
            ( iMA ( "EURUSD" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "EURUSD" , 0 ,Period_low, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "EURGBP" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "EURGBP" , 0 ,Period_low, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "EURCHF" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "EURCHF" , 0 ,Period_low, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "EURJPY" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "EURJPY" , 0 ,Period_low, 0 ,Mode,Price,i))* 100
            ;
        GBP[i]=
            ( iMA ( "GBPUSD" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "GBPUSD" , 0 ,Period_low, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "EURGBP" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "EURGBP" , 0 ,Period_fast, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "GBPCHF" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "GBPCHF" , 0 ,Period_low, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "GBPJPY" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "GBPJPY" , 0 ,Period_low, 0 ,Mode,Price,i))* 100
            ;
        CHF[i]=
            ( iMA ( "USDCHF" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "USDCHF" , 0 ,Period_fast, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "EURCHF" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "EURCHF" , 0 ,Period_fast, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "GBPCHF" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "GBPCHF" , 0 ,Period_fast, 0 ,Mode,Price,i))* 10000
            +
            ( iMA ( "CHFJPY" , 0 ,Period_fast, 0 ,Mode,Price,i)-
             iMA ( "CHFJPY" , 0 ,Period_low, 0 ,Mode,Price,i))* 100
            ;
        JPY[i]=
            ( iMA ( "USDJPY" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "USDJPY" , 0 ,Period_fast, 0 ,Mode,Price,i))* 100
            +
            ( iMA ( "EURJPY" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "EURJPY" , 0 ,Period_fast, 0 ,Mode,Price,i))* 100
            +
            ( iMA ( "GBPJPY" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "GBPJPY" , 0 ,Period_fast, 0 ,Mode,Price,i))* 100
            +
            ( iMA ( "CHFJPY" , 0 ,Period_low, 0 ,Mode,Price,i)-
             iMA ( "CHFJPY" , 0 ,Period_fast, 0 ,Mode,Price,i))* 100
            ;
       }

   object( "USD" , "USD" , 10 , indicator_color1, 5 );
   object( "EUR" , "EUR" , 10 , indicator_color2, 18 );
   object( "GBP" , "GBP" , 10 , indicator_color3, 31 );
   object( "CHF" , "CHF" , 10 , indicator_color4, 44 );
   object( "JPY" , "JPY" , 10 , indicator_color5, 57 );
   //----
     return ( 0 );
  }
//+------------------------------------------------------------------+


// Удаляем графический объект
void DeleteObject( string name) {
   ObjectDelete (name+ WindowExpertName ());
}
// Рисуем метку
void object( string name, string _text, int fontsize, color color_, int value) {
 string objName = name+ WindowExpertName ();
 ObjectCreate (objName, OBJ_LABEL , WindowFind ( WindowExpertName ()), 0 , 0 );
 ObjectSetText (objName, _text, fontsize, "Verdana" , color_);
 ObjectSet (objName, OBJPROP_CORNER , 1 );
 ObjectSet (objName, OBJPROP_XDISTANCE , 4 );
 ObjectSet (objName, OBJPROP_YDISTANCE , value); 
}
 
int wndNum;                                 // Номер подокна индикатора  /// И ЭТО ТОЖЕ НЕ ИСПОЛЬЗУЕТЕ ВИДИМО ОСТАЛОСЬ ОТ ПРЕДЫДУЩЕГО ПИСАТЕЛЯ

string wndName=????;                             // Наименование окна /// ЧТО ЭТО ?????

// Удаляем графический объект
void DeleteObject( string name) {
   ObjectDelete (name+ WindowExpertName ()); // Вы нашли окно предварительно? 
}
// Рисуем метку
void object( string name, string _text, int fontsize, color color_, int value) {
 string objName = name+ WindowExpertName ();
 ObjectCreate (objName, OBJ_LABEL , WindowFind ( WindowExpertName ()), 0 , 0 ); // То же самое
 ObjectSetText (objName, _text, fontsize, "Verdana" , color_);
 ObjectSet (objName, OBJPROP_CORNER , 1 );
 ObjectSet (objName, OBJPROP_XDISTANCE , 4 );
 ObjectSet (objName, OBJPROP_YDISTANCE , value); 
}
창 이름을 개체 이름에 바인딩하지 말고 고유한 이름으로 개체의 이름을 지정하십시오.
 
FAQ :
창 이름을 개체 이름에 바인딩하지 말고 고유한 이름으로 개체의 이름을 지정하십시오.

감사합니다. 이해가 되는 것 같습니다. 이제 창의 이름을 지정하고 찾으려고 합니다.