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

 
Igor Makanu :

아마도 다음과 같이 판매될 것입니다.

이익= NormalizeDouble ((OrderOpenPrice()-Ask)* MarketInfo (_Symbol, MODE_TICKVALUE )*lot/ Point , 2 );

입찰 수로 구매, 즉. ( 입찰 - OrderOpenPrice())

  Take_Profit =100 pp lot =0.1 T\P에 의해 포지션이 마감될 때 오픈 포지션의 이익은 통화로 얼마입니까?

profit= NormalizeDouble (( OrderOpenPrice ()-Тейк_Профит*Point)* MarketInfo ( _Symbol , MODE_TICKVALUE )*lot/ Point , 2 );

그런 식으로 작동하지 않습니다.

 
Vitaly Muzichenko :

당신은 운영해야 합니다: 부지 -> 돈 -> 거리, 음, 틱 비용

돈, 알아야 할 것)

 
Vitaly Muzichenko :

솔루션은 커미션과 스왑을 고려하지 않습니다. 이익과 같은 점과 비용 - 손실.

커미션과 스왑이 있는 경우 OrderProfit()+ OrderComission()+OrderSwap() 공식이 마음에 들지 않습니다.

도움말에 따르면 커미션은 포인트 또는 예금 통화 로 표시될 수 있으며 이 공식은 이를 고려하지 않으며 테스트할 때 득보다 실이 많을 수 있지만 이는 취향의 문제입니다.

가보 :

  Take_Profit =100 pp lot =0.1 T\P에 의해 포지션이 마감될 때 오픈 포지션의 이익은 통화로 얼마입니까?

그런 식으로 작동하지 않습니다.

수학이 당신의 강점이 아닙니까? ;)

그리고 다음과 같이:

이익=NormalizeDouble(( Take_Profit *Point )*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

단축하면 된다.

이익=NormalizeDouble(lot * TakeProfit * MarketInfo(_Symbol,MODE_TICKVALUE),2);

 
Vitaly Muzichenko :

이것은 계산에서 OrderProfit() 을 사용해야 함을 의미합니다.

이익실현이 트리거될 때 20 USD의 이익을 얻을 수 있도록 포지션을 개설 하기 위해 주문을 보내기 전에 미래 포지션의 로트를 계산하는 방법은 무엇입니까? OrderProfit()은 여기에서 도움이 되지 않습니다. 아직 포지션이 없습니다.

또는 다른 말로 하자면: 0.1로 많이 오픈할 때 20 USD의 이익을 얻으려면 퓨처 포지션의 테이크 이익은 얼마여야 합니까? 그리고 여기에서 OrderProfit()은 같은 이유로 도움이 되지 않습니다.

그리고 당신은 또한 이것을 할 수 있습니다: 많은 0.1로 열 때 자유 마진의 3% 이하의 손실을 내기 위해 미래 포지션의 손절매는 얼마여야 합니까? 그리고 여기에서 OrderProfit()은 같은 이유로 도움이 되지 않습니다.

upd: 모든 계산은 수수료와 스왑을 모른 채 대략적인 것입니다. 센트 또는 포인트의 정확도가 필요한 경우 이미 "적절한" 스톱 오더를 조정해야 합니다.

 
Artyom Trishkin :

이익실현이 트리거될 때 20 USD의 이익을 얻을 수 있도록 포지션을 개설 하기 위해 주문을 보내기 전에 미래 포지션의 로트를 계산하는 방법은 무엇입니까? OrderProfit()은 여기에서 도움이 되지 않습니다. 아직 포지션이 없습니다.

또는 다른 말로 하자면: 0.1로 많이 오픈할 때 20 USD의 이익을 얻으려면 퓨처 포지션의 테이크 이익은 얼마여야 합니까? 그리고 여기에서 OrderProfit()은 같은 이유로 도움이 되지 않습니다.

방금 작성하고 열기 전에 계산해야한다는 것을 깨닫고 즉시 메시지를 삭제했습니다. 얼마나 잘 대답했습니까?

한번은 이걸 쓰고 커미션으로 1랏당 금액을 입력파라미터에 입력했습니다.

 
안녕하세요 이해가 안되네요 도와주세요 이 코드에서 잘못된 것은 무엇입니까? 댓글에 평균값을 표시했는데 틱마다 증가하나요? 돕다:-))))
 for (shift = 0 ; shift <= Bars - 1 ; shift++)
  {
      zz = iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , shift);
           if (zz > 0.0 )
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for (ww= 0 ;ww<=nn;ww++){
       if (HZZ[ww]>HZZ[ww+ 1 ]){SredRazmax += HZZ[ww];}     
       if (HZZ[ww]<HZZ[ww+ 1 ]){SredRazmin += HZZ[ww+ 1 ];}
      
       
   Comment ( "Средний размах = " , (SredRazmax-SredRazmin)/nn, "," ,HZZ[ 0 ], "," ,HZZ[ 1 ], "," ,HZZ[ 2 ], "," ,HZZ[ 3 ], "," ,HZZ[ 4 ]); 
 
Dmitry Belov :
틱마다 증가합니까? 돕다:-))))

그것은 당신이 제시한 코드마다 계산 하고 SredRazmax 및 SredRazmin 변수를 초기화하지 않는다는 것을 의미합니다

사용하기 전에 변수를 초기화하는 것은 좋은 습관입니다. 이것이 대학에서 가르치는 방식이며 버그를 검색할 때 시간을 단축합니다 ;)

 

동료 여러분, 이 코드가 실시간으로 올바르게 실행되는 동안 전략 테스터에서 실행을 거부하는 이유는 무엇입니까? 우리는 OnChartEvent() 함수 에 대해 구체적으로 이야기하고 있습니다. 테스터의 시각화 모드에서는 버튼을 클릭해도 실행되지 않습니다.

 input double lot= 0.1 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   ButtonCreate( "ButtonBuy" , 100 , 100 , 200 , 40 , "Buy" , 15 , clrBlue );
   ButtonCreate( "ButtonSell" , 100 , 200 , 200 , 40 , "Sell" , 15 , clrRed );
   return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
   long cid= ChartID ();
   if (id== CHARTEVENT_OBJECT_CLICK && sparam== "ButtonBuy" )
     {
       if ( OrderSend ( _Symbol , OP_BUY ,lot, Ask , 200 , 0 , 0 , NULL , 0 , 0 , clrBlue )==- 1 )
         Print ( "Error: " , GetLastError ());
       ObjectSetInteger (cid, "ButtonBuy" , OBJPROP_STATE , false );
     }
   if (id== CHARTEVENT_OBJECT_CLICK && sparam== "ButtonSell" )
     {
       if ( OrderSend ( _Symbol , OP_SELL ,lot, Bid , 200 , 0 , 0 , NULL , 0 , 0 , clrRed )==- 1 )
         Print ( "Error: " , GetLastError ());
       ObjectSetInteger (cid, "ButtonSell" , OBJPROP_STATE , false );
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ButtonCreate                                                     | 
//+------------------------------------------------------------------+ 
void ButtonCreate( string name, int x, int y, int width, int height,
                   string text, int font_size, color back_clr)
  {
   long cid= ChartID ();
   int subWind= 0 ;
   ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER ;
   string font= "Cambria" ;
   color text_clr= clrBlack ;
   color border_clr= clrBlack ;
   bool state= false ;
   bool back= false ;
   bool selectable= false ;
   bool selected= false ;
   bool hidden= true ;
   long zorder= 0 ;
   if ( ObjectFind (cid,name)==- 1 )
     {
       ObjectCreate (cid,name, OBJ_BUTTON ,subWind, 0 , 0 );
       ObjectSetInteger (cid,name, OBJPROP_XDISTANCE ,x);
       ObjectSetInteger (cid,name, OBJPROP_YDISTANCE ,y);
       ObjectSetInteger (cid,name, OBJPROP_XSIZE ,width);
       ObjectSetInteger (cid,name, OBJPROP_YSIZE ,height);
       ObjectSetInteger (cid,name, OBJPROP_CORNER ,corner);
       ObjectSetString (cid,name, OBJPROP_TEXT ,text);
       ObjectSetString (cid,name, OBJPROP_FONT ,font);
       ObjectSetInteger (cid,name, OBJPROP_FONTSIZE ,font_size);
       ObjectSetInteger (cid,name, OBJPROP_COLOR ,text_clr);
       ObjectSetInteger (cid,name, OBJPROP_BGCOLOR ,back_clr);
       ObjectSetInteger (cid,name, OBJPROP_BORDER_COLOR ,border_clr);
       ObjectSetInteger (cid,name, OBJPROP_BACK ,back);
       ObjectSetInteger (cid,name, OBJPROP_STATE ,state); 
       ObjectSetInteger (cid,name, OBJPROP_SELECTABLE ,selectable);
       ObjectSetInteger (cid,name, OBJPROP_SELECTED ,selected);
       ObjectSetInteger (cid,name, OBJPROP_HIDDEN ,hidden);
       ObjectSetInteger (cid,name, OBJPROP_ZORDER ,zorder);
     }
  }
//+------------------------------------------------------------------+
 
Oleg Remizov :

동료 여러분, 이 코드가 실시간으로 올바르게 실행되는 동안 전략 테스터에서 실행을 거부하는 이유는 무엇입니까? 우리는 OnChartEvent() 함수 에 대해 구체적으로 이야기하고 있습니다. 테스터의 시각화 모드에서는 버튼을 클릭해도 실행되지 않습니다.

MT4에서는 OnChartEvent()가 테스터에서 작동하지 않기 때문입니다. 테스터에서 버튼 상태 플래그를 확인하십시오.
 
Artyom Trishkin :
MT4에서는 OnChartEvent()가 테스터에서 작동하지 않기 때문입니다. 테스터에서 버튼 상태 플래그를 확인하십시오.

글쎄, 고마워! 그런 의혹이 있었는데 도움말에서 OnChartEvent() 가 테스터에서 작동하지 않는다는 정보를 찾지 못했습니다.