[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 415

 
Neo777 :

여기서 고문은 교차로뿐만 아니라 양초가 닫힐 때 주문이 열리도록해야합니다.

도움을 주실 수 있는 분, 미리 감사드립니다.


그리고 이 틱에서 바가 닫힐지 어떻게 알 계획입니까? 아마도 새로운 바를 연 후에 ?

코드는 SRC 버튼으로 삽입됩니다.

 

확인.

새로운 바

 
Neo777 :

확인.

네 새로운 바

https://www.mql5.com/en/articles/1494 여기에서 새로운 바가 시작되었는지 확인하는 방법이 나와 있습니다. 시작 방법 - 상태 확인
 

좋은 하루입니다 여러분, 누군가가 WindowScreenShot 기능을 이해하도록 도와주세요. 3일째 아무도 대답하지 않음((.아래 내용으로 스크립트를 작성함(첨부파일 참조).

스크립트에 대해 2 단어로. 스크립트는 클라이언트 터미널 창의 현재 차트의 스크린샷을 생성하도록 설계되었습니다.외부 변수 extern datetime Bar_time 은 막대의 시간을 설정합니다. 차트에서 오른쪽 들여쓰기). 인라인

int bar_number=iBarShift(NULL,0,Bar_time,true)

extern datetime Bar_time 문자열로 외부 변수에 지정된 막대의 서수를 검색합니다. 그리고 이미 함수 자체에 직접

bool f=WindowScreenShot(name+".gif",1024,768,bar_number,Scale,Graph_View)

이제 실제 질문은... 간단하게 하기 위해 마지막 두 막대의 스크린샷을 만들어야 한다고 가정하겠습니다. 그렇다면 라인

int bar_number=iBarShift(NULL,0,Bar_time,true)

변경하지 않고 그대로 두면 다음과 같은 스크린샷이 나타납니다.


즉, 스크린샷에는 단일 막대가 없습니다(줄에 있지만

int bar_number=iBarShift(NULL,0,Bar_time,true)

막대 번호는 시간으로 계산되어야 함)

이 선을 다음과 같이 표현하면

int bar_number=iBarShift(NULL,0,Bar_time,true)+2

그런 다음 원하는 스크린샷을 얻습니다.

질문 : 왜 이 라인의 형식이

int bar_number=iBarShift(NULL,0,Bar_time,true)

위의 줄에 지정된 것에서 오른쪽으로 2개의 막대를 이동하여 스크린샷을 찍은 것입니까?

PS 포럼을 어지럽히지 않기 위해 미리 답변 주셔서 감사합니다.

파일:
 
ilunga :
코드 표시 + 표시기의 입력 매개변수는 무엇입니까

글쎄, 나는 모든 것을 20 번 확인하고 20 번을 확인하지 않고 쓰지 않을 것입니다. 모든 매개 변수는 표시기에서와 같이 올바르게 입력됩니다. 문제는 아마도 다른 데 있을 것입니다. 누구든지 그러한 문제를 겪을 수 있습니까?
 

동료!! 좋은 저녁이에요!

놀라운 QQE 지표를 발견했습니다! 이 지표를 기반으로 조언자를 찾기로 결정했습니다....찾을 수 없었습니다. 그러나 이 포럼에서 사용자 POZITIV의 메시지를 찾았습니다.

그는 다음과 같은 논리를 내놓았습니다. "빨간 선이 노란색 선을 아래에서 위로 교차할 때 하나 의 매수 주문이 열려야 하고 빨간색 선이 위에서 아래로 노란색 선을 교차할 때 하나 의 매도 주문이 열려야 합니다."

그 결과 반제품 EA 코드를 게시했습니다.

나는 다른 논리를 생각해 냈습니다. 굵은 곡선이 위에서 아래로 점선을 교차할 때 굵은 빨간색 곡선이 아래에서 위로 점선을 교차할 때 이 로트를 매도하고 닫아야 합니다(매수). 게다가 동시에 반대 상황이 발생하면 닫는(매도) 다른 로트를 즉시 오픈(매수)하는 ..... 일반적으로 하나의 로트가 지속적으로 열려 있고 라인의 각 교차점을 사용하여 하나의 로트를 닫습니다. 동시에 다른 부지를 엽니다. 또한 교차점은 아마도 하나의 막대가 닫힌 후 값에 따라 고려되어야 합니다. 20분(종료 후)에 굵은 값이 51(기존)이고 점선 값이 50이고 21분(종료 후)에 굵은 값이 50이고 점선 값이 51인 경우 판매하는 것이 필요합니다. SL과 TK가 없습니다.

원칙적으로 논리는 간단합니다. 화살표, 경보 또는 메시지가 없습니다. 가장 순수한 형태의 자동 모드에서만 거래

이 코드(아래)를 그러한 논리로 개선하는 데 도움을 주세요. 코드에서 기간(1분에서 1일)과 SF 매개변수(스무딩)를 설정할 수 있도록 합니다.

둘째 날에는 코드를 이해하고 수정하려고 노력했지만 저는 프로그래머가 아닙니다((((((((((()


나는 당신의 도움을 정말로 바랍니다!

 //--- input parameters
extern double MaxRisk= 1.0 ;
extern double FixLot = 0.01 ;
extern double Exponent= 2.0 ;
extern int Magic= 888 ;

// костыли

extern int TakeProfit= 100 ;
extern int StopLoss= 100 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
//----
   int Count= 0 ;
   double b0,b1;
   int ticket;

// параметры индикатора
   int SF= 5 ; // original 5
   int RSI_Period= 14 ; // original 14
   double DARFACTOR= 4.236 ; //original 4.236

//------------ Параметры из индикатора QQEA -----------------------
// Buffer0 -- красная жирная
   string Buffer0= iCustom ( NULL , 0 , "QQEA" ,SF,RSI_Period,DARFACTOR, 0 , 0 );
// Buffer1 -- жёлтый пунктир
   string Buffer1= iCustom ( NULL , 0 , "QQEA" ,SF,RSI_Period,DARFACTOR, 1 , 0 );

   b0= StrToDouble (Buffer0);
   b1= StrToDouble (Buffer1);


   double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибке
   if (Lot== 0 )
     {
       Alert ( "Недостаточно средств!" );
       return ( 0 );
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if (Lot!= 0 && b0>b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_BUY,Lot);
       if (ExistOrders( Symbol (), 1 , 888 , 0 )==true) // проверяем наличие ордера sell
        {
         CloseOrder();
        }
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if (Lot!= 0 && b0<b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_SELL,Lot);
       if (ExistOrders( Symbol (), 0 , 888 , 0 )==true) // проверяем наличие ордера buy
        {
         CloseOrder();
        }
     }

   Comment ( "Red line: " ,b0, "Yellow line: " ,b1);
   return ( 0 );
  }
//-------------------------------------------------------------
//расчёт лота

double GetLot( int Risk)
  {
   double Free= AccountFreeMargin ();
   double One_Lot = MarketInfo ( Symbol (),MODE_MARGINREQUIRED);
   double Min_Lot = MarketInfo ( Symbol (),MODE_MINLOT);
   double Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
   double Step= MarketInfo ( Symbol (),MODE_LOTSTEP);
   double Lot = MathFloor (Free*Risk/ 100 /One_Lot/Step)*Step;
   if (Lot<Min_Lot) Lot=Min_Lot;
   if (Lot>Max_Lot) Lot=Max_Lot;
   if (Lot*One_Lot>Free) return ( 0.0 );
   return (Lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistOrders( string sy= "" , int op=- 1 , int Magic=- 1 , datetime ot= 0 )
  {
   int i,k= OrdersTotal (),ty;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++)
       //+------------------------------------------------------------------+
       //|                                                                  |
       //+------------------------------------------------------------------+
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         ty= OrderType ();
         if (ty> 1 && ty< 6 )
           {
             if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || ty==op))
              {
               if (Magic< 0 || OrderMagicNumber ()==Magic)
                 {
                   if (ot<= OrderOpenTime ()) return (True);
                 }
              }
           }
        }
     }
   return (False);
  }
//открытие нового ордера
int NewOrder( int Cmd, double Lot)
  {
   double TP= 0 ; //тейкпрофит
   double SL= 0 ; //стоплосс
   double PR= 0 ; //Цена
   while (! IsTradeAllowed ()) Sleep ( 100 );
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if (Cmd==OP_BUY)
     {
      PR=Ask;
       if (TakeProfit> 0 ) TP=Ask+TakeProfit* Point ;
       if (StopLoss> 0 ) SL=Ask-StopLoss* Point ;
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if (Cmd==OP_SELL)
     {
      PR=Bid;
       if (TakeProfit> 0 ) TP=Bid-TakeProfit* Point ;
       if (StopLoss> 0 ) SL=Bid+StopLoss* Point ;
     }
   if (GetOrdersCount(Magic,Cmd)> 0 ) return ( 0 );
   int tic= OrderSend ( Symbol (),Cmd,Lot,PR, 3 ,SL,TP, " " , 0 , 0 , Green );
   if (tic< 0 ) Print ( "Ошибка открытия ордера: " , GetLastError ());
   return (tic);
  }
// закрытие ордера
void CloseOrder()
  {
   double PR= 0 ;
   while (! IsTradeAllowed ()) Sleep ( 100 );
   if ( OrderType ()==OP_BUY) PR=Bid;
   if ( OrderType ()==OP_SELL) PR=Ask;
   if (! OrderClose ( OrderTicket (), OrderLots (),PR, 3 , Red ))
       Print ( "Ошибка закрытия ордера: " , GetLastError ());
   return ;
  }
//+------------------------------------------------------------------+
// подсчет кол-ва открытых позиций
int GetOrdersCount( int MagicNumber, int Type)
  {
   int count= 0 ;

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       // already closed
       if ( OrderSelect (i,SELECT_BY_POS)==false) continue ;
       // not current symbol
       if ( OrderSymbol ()!= Symbol ()) continue ;
       // order was opened in another way
       if ( OrderMagicNumber ()!=MagicNumber) continue ;

       if ( OrderType ()==Type)
        {
         count++;
        }
     }

   return (count);
  }
//-------------------------------------------------------
 
sss2019 :

글쎄, 나는 모든 것을 20 번 확인하고 20 번을 확인하지 않고 쓰지 않을 것입니다. 모든 매개 변수는 표시기에서와 같이 올바르게 입력됩니다. 문제는 아마도 다른 데 있을 것입니다. 누구든지 그러한 문제를 겪을 수 있습니까?
iCustom에 매개변수를 잘못 입력했을 뿐입니다. 검색.
다른 날 나는 그와 싸우며 저녁을 보냈다. 지표에서 Expert Advisor로 외부를 전송할 때 매개변수의 순서가 혼동되었습니다. 거의 미쳐버릴 뻔했는데, 양이 일치했어요 :))
 
granit77 :
iCustom에 매개변수를 잘못 입력했을 뿐입니다. 검색.
다른 날 나는 그와 싸우며 저녁을 보냈다. 지표에서 Expert Advisor로 외부를 전송할 때 매개변수의 순서가 혼동되었습니다. 거의 미쳐버릴 뻔했는데, 양이 일치했어요 :))

 iCustom ( Symbol (), 0 , "RMRCS_entry-point" , " " , 5 , 6 , 7 , 62 ,- 62 , 57 ,- 57 , 54 ,- 54 , 0.7 , 1.1 , 1.07 , " " , 1 , 9 , 6 , 1 , 34 , 6 , 0 , 4 , 89 , 1 , 3 , 3.0 , 2.0 , 0.5 , 3.0 , " " , 6 , 6 , 70 , 30 , 0.0 , 6 , 3.0 , " " , 1 , 21 , 1 , 45 , 89 , 1 , 35 , 89 , 1 , 9 , " " , 4 , 2 , 5 , 1 , " " , 49 ,- 49 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , " " , 0 , 34 , 200 , 150 , 1 , 100 , " " , 1 , 3 , 1 , 1 , 2 , " " , 1.4 , 3.7 , 0 , 1 );


그리고 여기 매개변수가 있습니다

 extern string REI_str = "" ;
extern int REI1_Per= 5 ; 
extern int REI2_Per= 6 ;     
extern int REI3_Per= 7 ;     
extern int REI1_up= 62 ;    
extern int REI1_dn=- 62 ;    
extern int REI2_up= 57 ;     
extern int REI2_dn=- 57 ;            
extern int REI3_up= 54 ;     
extern int REI3_dn=- 54 ;            
extern double REI1_ct= 0.7 ;  
extern double REI2_ct= 1.1 ;  
extern double REI3_ct= 1.07 ;
extern string MACD_str = "" ;
extern int MACD_FastMA_Meth= 1 ;   
extern int MACD_FastMA_Per= 9 ;    
extern int MACD_FastMA_Price= 6 ; 
extern int MACD_SlowMA_Meth= 1 ;   
extern int MACD_SlowMA_Per= 34 ; 
extern int MACD_SlowMA_Price= 6 ; 
extern int MACD_SL_Meth= 0 ;      
extern int MACD_SL_Per= 4 ;       
extern int MACD_Diap_Per= 89 ;    
extern int MACD_Slope_Meth= 1 ;   
extern int MACD_Slope_Per= 3 ;  
extern double MACD_ct_1 = 3.0 ; 
extern double MACD_ct_2 = 2.0 ;  
extern double MACD_ct_3 = 0.5 ;  
extern double MACD_ct_4 = 3.0 ;  
extern string RSI_str = "" ;
extern int RSI_Per = 6 ;     
extern int RSI_Price = 6 ;  
extern int RSI_up = 70 ;      
extern int RSI_dn = 30 ;     
extern double RSI_ct1 = 0.0 ; 
extern int RSI_ct2 = 6 ;      
extern double RSI_ct3 = 3.0 ;
extern string CHO_str = "" ;
extern int   CHO_FastMA_Meth= 1 ;      
extern int   CHO_FastMA_Per= 21 ;      
extern int   CHO_SlowMA_Meth= 1 ;      
extern int   CHO_SlowMA_Per= 45 ;      
extern int   CHO_DiapVal_Per= 89 ;     
extern int   CHO_MADiapVal_Meth= 1 ;   
extern int   CHO_MADiapVal_Per= 35 ;    
extern int   CHO_SlopeDiapVal_Per= 89 ;  
extern int   CHO_MASlope_Meth= 1 ;      
extern int   CHO_MASlope_Per= 9 ;       
extern string Stoch_str = "" ;
extern int Stoch_KPer= 4 ;       
extern int Stoch_DPer= 2 ;        
extern int Stoch_Slow= 5 ;        
extern int Stoch_SL_MA_Meth= 1 ; 
extern string EntryLevel_str = "" ;
extern int REI_SvS_up = 49 ;  
extern int REI_SvS_dn = - 49 ; 
extern int MACD_SvS_up = 0 ; 
extern int MACD_SvS_dn = 0 ;  
extern int RSI_SvS_up = 0 ;  
extern int RSI_SvS_dn = 0 ; 
extern int CHO_SvS_up = 0 ;  
extern int CHO_SvS_dn = 0 ;  
extern int STO_SvS_up = 0 ; 
extern int STO_SvS_dn = 0 ;  
extern string EntryOther_str = "" ;
extern int MALgthBar_Meth= 0 ;
extern int MALgthBar_Per= 34 ;
extern int MAXLgthBar = 200 ;
extern int TtS_MinABS = 150 ; 
extern int Shift_Points = 1 ; 
extern int Start_Calc = 100 ;   
extern string EntryCondition = "" ;
extern bool Ban_InvEntry = true ;    
extern int InvEntry_Bars = 3 ;        
extern bool Ban_TtS_Decline= true ;   
extern bool Ban_Entry_Series = true ; 
extern int MAX_Entry_Series= 2 ;      
extern string Gen_str = "" ; 
extern double DiapBar_CtSl = 1.4 ;
extern double TakeProf_CtSl = 3.7 ;
 
sss2019 :
iCustom을 통해 연결할 때 비표준 표시기의 매개변수 수에 제한이 있습니까?

약 8개의 매개변수가 있는 표시기가 있고 모든 매개변수를 올바르게 입력하고 여러 번 확인했지만 컴파일하는 동안 오류 ')'가 계속 나타납니다. 잘못된 매개변수 개수 D:\InstaTrader\experts\Expert_2.mq4 (11, 280 )

나는 "약 80"이라고 말할 것입니다.
 

거의 사용되지 않는 일부 매개변수에서 extern을 제거하면 혼동이 없을 것입니다.

내 질문에 주의:

왜 촛불 아래에 물건이 있습니까? 그 이유는 무엇입니까?

가격에 플래그를 만드는 방법 , 개체의 어떤 종류의 속성을 상기시키지 마십시오.