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

 
Taras Slobodyanik :

OnInit에서 변수 초기화 수행(객체 다시 그리기 포함)


무슨 말을 하는지 설명하세요.

레이블 생성 후 OnInit에 추가됨

     ObjectSetInteger ( 0 , objname, OBJPROP_YDISTANCE , y);
     ChartRedraw ();


그러나 결과는 동일합니다.

 
psyman :


무슨 말을 하는지 설명하세요.

레이블 생성 후 OnInit에 추가됨


그러나 결과는 동일합니다.

코드를 봐야하는데...

추신. 위의 코드는 잘 작동합니다(결함이 보이지 않음)
(https://www.mql5.com/en/forum/160683/page739#comment_10290585)


pps. Bid 변수를 Bid0으로 교체했지만

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2019.01.17
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
좋은 오후, 이사 가격이 터치되면 주문이 열리려면 어떻게 써야합니까?
 
Ivan Rozhkov :
좋은 오후, 이사 가격이 터치되면 주문이 열리려면 어떻게 써야합니까?
 if ((prev_bid>ma && curr_bid<=ma) || (prev_bid<ma && curr_bid>=ma))
   //открывается ордер
 
Taras Slobodyanik :

코드를 봐야하는데...

추신. 위의 코드는 잘 작동합니다(결함이 보이지 않음)
(https://www.mql5.com/en/forum/160683/page739#comment_10290585)


pps. Bid 변수를 Bid0으로 교체했지만

나는 내가 5-ke에서 그것을 테스트하고 있다는 것을 덧붙이는 것을 잊었다. MT4에서는 차트를 열 때 레이블이 수직으로 제자리로 이동하므로 틱을 기다리거나 마우스를 이동할 필요가 없습니다. 수평 변위가 있는 글리치가 여러 번 있었지만 표시기를 다시 컴파일하는 것만으로 이를 극복할 수 있었습니다.

 
psyman :


나는 시도했지만 레이블이 반환되도록 마우스를 움직여야합니다. 이것은 다른 쪽에서만 동일한 목발입니다 :-)

그리고 CHARTEVENT_CHART_CHANGE에 대한 차트 간 전환은 이벤트가 아닙니다.

누구든지 이 이상 현상을 극복하는 방법을 알아낼 수 있습니까?


인쇄는 차트 창을 스위치의 반대 방향으로 전환하면 메시지를 표시합니다(저는 실제로 MT4에 있지만 MT4 도크에는 차트 전환이 이벤트로 포착될 수 있다고 기록되어 있지 않습니다) CHARTEVENT_CHART_CHANGE )

 void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
   if (id== CHARTEVENT_CHART_CHANGE ) Print ( "graph" );
}

그러나 예, 여전히 목발 방법입니다. 다른 차트로 전환할 때 Y 좌표가 다른 이유를 찾아야 합니다. 그러나 코드를 보면 이 ChartTimePriceToXY 가 어떤 이유로 다른 결과를 생성한다는 결론이 나옵니다.

 
psyman :

나는 내가 5-ke에서 그것을 테스트하고 있다는 것을 덧붙이는 것을 잊었다. MT4에서는 차트를 열 때 레이블이 수직으로 제자리로 이동하므로 틱을 기다리거나 마우스를 이동할 필요가 없습니다. 수평 변위가 있는 글리치가 여러 번 있었지만 표시기를 다시 컴파일하는 것만으로 이를 극복할 수 있었습니다.

글쎄, 상위 5개에는 많은 "기능"이 있습니다 - 차트 대기열에서 분 단위로 막대 생성, 현재 초기화 후 이전 deinit 트리거)

일반적으로 - 막대/차트/객체 - 어느 지점에서 오류가 발생했는지 확인하고 수정해야 합니다.

 
Taras Slobodyanik :


일반적으로 - 막대/차트/객체 - 어느 지점에서 오류가 발생했는지 확인하고 수정해야 합니다.


어떻게, 어디서부터 시작해야 할까요?

 
psyman :


어떻게, 어디서부터 시작해야 할까요?

모든 곳에서 인쇄하십시오. 즉, onit에서 입찰가를 인쇄하고 (현재 날짜를 사용할 수도 있음) 너무 계산할 때 ...
이 이야기는 당장 쌓을 시간이 없고 나중에 막대가 나온다는 것을 텔레파시한다.

 
Taras Slobodyanik :

모든 곳에서 인쇄하십시오. 즉, onit에서 입찰가를 인쇄하고 (현재 날짜를 사용할 수도 있음) 너무 계산할 때 ...
이 이야기는 당장 쌓을 시간이 없고 나중에 막대가 나온다는 것을 텔레파시한다.

다음 코드의 경우 그림의 이야기:

 //+------------------------------------------------------------------+
//|                                              !_clr_indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window


string objname= "Bid" ;
input color Bid_color = clrCrimson ;

int OnInit ()
  {

int x,y;
double Bid0 = SymbolInfoDouble ( Symbol (), SYMBOL_BID );
int width = ( int ) ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS , 0 );   //ширина графика



         Print ( "1 Bid0 = " , Bid0,   " x = " , x, " y = " , y, " TimeCurrent()=" , TimeCurrent () );

   ObjectCreate ( 0 , objname, OBJ_LABEL , 0 , 0 , 0 );
   
   ObjectSetString ( 0 , objname, OBJPROP_TEXT , DoubleToString (Bid0, _Digits - 1 ));
         ObjectSetInteger ( 0 , objname, OBJPROP_FONTSIZE , 12 );
         ObjectSetInteger ( 0 , objname, OBJPROP_COLOR , Bid_color);
         ObjectSetString ( 0 , objname, OBJPROP_FONT , "Verdana" );

         ChartTimePriceToXY ( 0 , 0 , TimeCurrent (), Bid0, x, y);
         Print ( "2 Bid0 = " , Bid0,   " x = " , x, " y = " , y, " TimeCurrent()=" , TimeCurrent () );
         
         ObjectSetInteger ( 0 , objname, OBJPROP_XDISTANCE , width- 60 );

   ObjectSetInteger ( 0 , objname, OBJPROP_YDISTANCE , y);

   

   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[])
  {

return (rates_total);

  }

void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam) 
  { 

int x2,y2;
double Bid2 = SymbolInfoDouble ( Symbol (), SYMBOL_BID );
double   cprice;
datetime ctime;
int       cwindow= 0 ;



if (id== CHARTEVENT_CHART_CHANGE ) 
   {
   



           ChartTimePriceToXY ( 0 , 0 , TimeCurrent (), Bid2, x2, y2); 
      
       Print ( "5 Bid2 = " , Bid2,   " x2 = " , x2, " y2 = " , y2, " TimeCurrent2()=" , TimeCurrent () );
      
         ObjectSetInteger ( 0 , objname, OBJPROP_YDISTANCE , y2);
   
   ChartXYToTimePrice ( 0 ,x2,x2,cwindow, ctime, cprice);
   

   }



  }



void OnDeinit ( const int reason) 
   { 

       ObjectDelete ( 0 ,objname);
   } 
 
 


네트워크 연결 해제, 표시기 추가

다음 차트로 전환


y2 값이 변경되었습니다. 다시 돌아갑니다.


y2가 값을 반환했지만 레이블은 "왼쪽" 값에 따라 계산되었습니다! 마우스 휠 돌리기

라벨이 돌아왔습니다!