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

 
if(TralProcent!=0)
 {
NewProfProc=Profit(-1)/(AccountBalance()/100);

if(NewProfProc>0 && (ProfitProcent==0 || ProfitProcent<NewProfProc))
  {ProfitProcent=NormalizeDouble(NewProfProc, 2);}
if(ProfitProcent>0 && ProfitProcent>(TralProcent+TralStartProcent))
  {TrallingProcent=ProfitProcent-TralProcent;}
//+----------------------------------------------- --------------------+
if(NewProfProc>0 && TrallingProcent!=0 && NewProfProc<=TrallingProcent)
{클로저();
 클로저B();
  이익률=0;
   TrallingProcent=0;}

 ------ 로봇은 % 균형에서 후행을 사용합니다. 여기에 단계 변경을 추가하는 방법을 알려주세요. 내가 올바르게 이해했다면 Tralingprocent에 필요합니다. 예를 들어, step = 2%이면 trailingprocent는 2% 이상 증가합니다.
 
khorosh :

Artyom Trishkin :

개체 - 모든 터미널 창과 해당 하위 창에 표시할 수 있습니다.

-------------------------------------------------- -------------------------------------------------- ----------------------------------

이렇게 시도했지만 무언가가 작동하지 않습니다.

아마도 창 번호와 관련된 것입니다. 차트에 별도의 창이 하나 있는 경우 해당 번호는 ==1입니까?

wndNum 표시할 창 번호

 int wndNum= 1 ;

int OnInit ()
 {
 string short_name= MQLInfoString ( MQL_PROGRAM_NAME );
 short_name+= ": MyIndicator" ;
 IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
 wndNum = ChartWindowFind ( 0 ,short_name);
 //---
   return ( INIT_SUCCEEDED );
 }

// Функция создания объекта
void SetLabel( string nm, string text, long xd, long yd, int fs, string font, int cr, int an, color cl, string tooltip, bool sel) {
 if ( ObjectFind ( 0 ,nm)< 0 ) {
     ObjectCreate ( 0 ,nm, OBJ_LABEL , wndNum , 0 , 0 );
     ObjectSetInteger ( 0 ,nm, OBJPROP_CORNER ,cr);
     ObjectSetInteger ( 0 ,nm, OBJPROP_ANCHOR ,an);
     ObjectSetString ( 0 ,nm, OBJPROP_FONT ,font);
     ObjectSetInteger ( 0 ,nm, OBJPROP_FONTSIZE ,fs);
     ObjectSetInteger ( 0 ,nm, OBJPROP_BACK , false );
     ObjectSetInteger ( 0 ,nm, OBJPROP_HIDDEN , false );
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTABLE ,sel);
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTED ,sel);
     ObjectSetString ( 0 ,nm, OBJPROP_TOOLTIP ,tooltip);
  }
     ObjectSetInteger ( 0 ,nm, OBJPROP_YDISTANCE ,yd);
     ObjectSetInteger ( 0 ,nm, OBJPROP_XDISTANCE ,xd);
     ObjectSetString ( 0 ,nm, OBJPROP_TEXT ,text);
     ObjectSetInteger ( 0 ,nm, OBJPROP_COLOR ,cl); 
 }
PS khorosh , 나는 개인에서 대답할 수 없습니다 - 채팅이 작동하지 않습니다!
 
Vitaly Muzichenko :

wndNum 표시할 창 번호

PS khorosh , 나는 개인으로 대답할 수 없습니다 - 채팅이 작동하지 않습니다!

고마워요 비탈리! 그리고 별도의 창에 위치한 인디케이터를 커브 끝에 어떻게 붙일 수 있을까요? Time[0] 좌표와 제로 바의 커브 버퍼 값을 좌표로 설정해 보았지만 잘 되지 않았습니다.

 
khorosh :

고마워요 비탈리! 그리고 별도의 창에 위치한 인디케이터를 커브 끝에 어떻게 붙일 수 있을까요? Time[0] 좌표와 제로 바의 커브 버퍼 값을 좌표로 설정해 보았지만 잘 되지 않았습니다.

그래서 그는 그 질문에 대답했습니다. 자주 나타나는 뉘앙스는 wndNum 값 자체입니다. wndNum 값은 상수가 아닙니다. 지속적으로 모니터링해야 합니다. 결국, 사용자는 현재 하위 창 앞에 있는 표시기 하위 창을 삭제할 수 있습니다. 또한 OnInit()에서 표시기 자체를 찾지 마십시오. 이러한 코드는 OnCalculate() 로 이동해야 합니다. 어쨌든 서브 윈도우 인덱스의 정확성을 지속적으로 확인해야 합니다.

 
Ihor Herasko :

그래서 그는 그 질문에 대답했습니다. 자주 나타나는 뉘앙스는 wndNum 값 자체입니다. wndNum 값은 상수가 아닙니다. 지속적으로 모니터링해야 합니다. 결국, 사용자는 현재 하위 창 앞에 있는 표시기 하위 창을 삭제할 수 있습니다. 또한 OnInit()에서 표시기 자체를 찾지 마십시오. 이러한 코드는 OnCalculate()로 이동해야 합니다. 어쨌든 서브 윈도우 인덱스의 정확성을 지속적으로 확인해야 합니다.

그는 객체의 좌표가 처음에 픽셀(정적 객체)로 가정되는 예가 있습니다. 그리고 지표 곡선에 바인딩해야 합니다. 따라서 먼저 이러한 좌표를 계산해야 합니다. 그는 그것을 보여주지 않습니다. 이렇게 시도했지만 뭔가 작동하지 않습니다(LevLabelSpread 변수의 첫 번째 막대에 곡선 버퍼 값이 있음).

....
int X= 0 ,Y= 0 ;
   wndNum= ChartWindowFind ( 0 ,Shortname);  
   ChartTimePriceToXY ( 0 ,wndNum, Time [ 1 ],LevLabelSpread,X,Y); Print ( "X=" ,X, " Y=" ,Y);    
   if ( ObjectFind ( "_Spread" )< 0 ) 
     {
       ObjectCreate ( 0 , "_Spread" , OBJ_TEXT , wndNum, 0 , 0 );
       ObjectSetText ( "_Spread" , "                Spread" , 10 , "Arial" , clrYellow );
     }
   else
     {
       ObjectSetInteger ( 0 , "_Spread" , OBJPROP_YDISTANCE ,Y);
       ObjectSetInteger ( 0 , "_Spread" , OBJPROP_XDISTANCE ,X);
      ObjectSetString (0,"_Spread",OBJPROP_TEXT,"                Spread");
     } 

.... 
 
khorosh :

그는 객체의 좌표가 처음에 픽셀(정적 객체)로 가정되는 예가 있습니다. 그리고 지표 곡선에 바인딩해야 합니다. 따라서 먼저 이러한 좌표를 계산해야 합니다. 그는 그것을 보여주지 않습니다. 이렇게 시도했지만 뭔가 작동하지 않습니다(LevLabelSpread 변수의 첫 번째 막대에 곡선 버퍼 값이 있음).

TEXT 유형의 객체에 대해 픽셀 단위로 가격을 계산하는 이유는 무엇입니까? 결국 그것은 바 시간과 가격으로 포지셔닝됩니다. 나는 다음과 같이 얻었다.

 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 nWndIndex = ChartWindowFind ();
   if (nWndIndex < 0 )
       return 0 ;
      
   string sName = "MyText" ;
   if ( ObjectFind ( 0 , sName) < 0 )
       ObjectCreate ( 0 , sName, OBJ_TEXT , nWndIndex, time[rates_total - 1 ], <здесь значение индикатора>);
      
   ObjectSetInteger ( 0 , sName, OBJPROP_ANCHOR , ANCHOR_LEFT );
   ObjectSetString ( 0 , sName, OBJPROP_TEXT , "Sample text" );

   return (rates_total);
}

결과:


 
Ihor Herasko :

TEXT 유형의 객체에 대해 픽셀 단위로 가격을 계산하는 이유는 무엇입니까? 결국 그것은 바 시간과 가격으로 포지셔닝됩니다. 나는 다음과 같이 얻었다.

결과:


정말 감사합니다.

 
Ihor Herasko :


잘 나왔다 :


 
차트 핸들과 차트 식별자 라는 두 가지 개념의 의미와 목적을 설명하십시오. 차이점은 무엇이며 어떻게 사용되며 어떤 경우에 사용됩니다.
 
khorosh :
차트 핸들과 차트 식별자 라는 두 가지 개념의 의미와 목적을 설명하십시오. 차이점은 무엇이며 어떻게 사용되며 어떤 경우에 사용됩니다.

둘 다 얻는 방법을 보여주세요. 지금까지 우리는 같은 것에 대해 이야기하고 있는 것 같습니다.