전문 고문 - 기타 질문 - 페이지 32

 

(이 댓글을 쓰기 전에 해결책을 찾기 위해 열심히 조사한 것 같아요. 예, 비슷한 스레드를 찾았지만 이 문제에 대한 해결책을 찾지 못했습니다. )

저는 손절매를 핍으로 표시하는 판매 주문 에 대해 아래 코드를 사용합니다. 손절매가 양수로 바뀔 때까지 올바른 값을 보여줍니다.
따라서이 문제를 해결하기 위해 어떻게 시도 할 수 있는지 전혀 모릅니다.

어떤 좋은 의견이라도 부탁드립니다.
(참고: 지금은 Trailing Stop을 사용하지 않습니다. 또한 OrderSend() 또는 이와 유사한 것이 아닌 정보 업데이트를 위한 코드도 아래에 있습니다. )

if ( OrderType ()== OP_SELL || ( OrderType ()== OP_SELLLIMIT || OrderType ()== OP_SELLSTOP ))
  {
   riskinpips=change_to_pips( OrderStopLoss ()- OrderOpenPrice ());
  }
Print ( "stop loss in pips" , DoubleToString (riskinpips, 2 ));

미리 감사드립니다.

손절매가 플러스 이익일 때

(참고: 내 문제를 설명하기 위해 사진 편집 프로그램에서 만든 스크린샷 레이블)
 

가장 높은 값에서 가장 낮은 값을 뺀 값이 결과를 제공하므로 어느 것이 가장 높은지 확인할 수 있습니다.

if ( OrderStopLoss ()> OrderOpenPrice ())
{
   // orderstoploss - orderopenprice
}

else if ( OrderOpenPrice ()> OrderStopLoss ())
{
   // orderopenprice - orderstoploss
}
 
Marco vd Heijden :

가장 높은 값에서 가장 낮은 값을 뺀 값이 결과를 제공하므로 어느 것이 가장 높은지 확인할 수 있습니다.

if ( OrderStopLoss ()> OrderOpenPrice ())
{
   // orderstoploss - orderopenprice
}

else if ( OrderOpenPrice ()> OrderStopLoss ())
{
   // orderopenprice - orderstoploss
}

나는 아무렇지 않다는 듯이 웃기만 한다. 이것이 나를 도울 수 있다고 생각합니다. 곧 나는 그것을 시도 할 것입니다.

고마워요 Mr. Marco

 

#이익통화계산 - 마감

그것은 지금까지 완벽하게 작동합니다.
@Marco vd Heijden@whroeder1 에 감사드립니다.

 

#시간 - 오픈

EA의 시간/시계에 대해 조사하기 시작한 이후로. 저자가 표시기에 start() JUST를 사용하는 것을 보았습니다.
내 EA에서 OnTimer() 및 OnTick()을 사용하지만 start()를 사용하고 싶지 않습니다.
따라서 시간 및 시계 기능에 어떤 특수 기능 이 더 나은지 확인/배울 필요가 있습니까?

나는 10시간 후에 이 문제에 대해 계속 연구할 것입니다.
(참고: Mql5.com Codebase 페이지에서 이미 몇 가지 시간 및 시계 표시기를 찾았지만 복사하여 붙여넣는 것을 좋아하지 않습니다.)

좋은 의견, 포럼 공유, 링크 및 다른 것이 저에게 더 좋을 것입니다.

미리 감사드립니다.

 

시작 기능은 스크립트 에서만 OnStart 로 대체됩니다. Expert Advisors 및 표시기에서는 각각 OnTickOnCalculate 로 이름을 변경해야 합니다. mql5 프로그램 작업 중에 실행될 코드는 다음 세 가지 함수에 있어야 합니다.

참조: https://www.mql5.com/en/docs/migration

Documentation on MQL5: Moving from MQL4
Documentation on MQL5: Moving from MQL4
  • www.mql5.com
Moving from MQL4 - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden :

시작 기능은 스크립트 에서만 OnStart 로 대체됩니다. Expert Advisors 및 표시기에서는 각각 OnTickOnCalculate 로 이름을 변경해야 합니다. mql5 프로그램 작업 중에 실행될 코드는 다음 세 가지 함수에 있어야 합니다.

@Marco 에게 너무 많은 정보를 주셔서 감사합니다. 이미 "MQL4에서 MQL5로 이동"을 읽었습니다.
 
Max Enrik :

#시간 - 오픈

EA의 시간/시계에 대해 조사하기 시작한 이후로. 저자가 표시기에 start() JUST를 사용하는 것을 보았습니다.
내 EA에서 OnTimer() 및 OnTick()을 사용하지만 start()를 사용하고 싶지 않습니다.
따라서 시간 및 시계 기능에 어떤 특수 기능 이 더 나은지 확인/배울 필요가 있습니까?

나는 10시간 후에 이 문제에 대해 계속 연구할 것입니다.
(참고: Mql5.com Codebase 페이지에서 이미 몇 가지 시간 및 시계 표시기를 찾았지만 복사하여 붙여넣는 것을 좋아하지 않습니다.)

좋은 의견, 포럼 공유, 링크 및 다른 것이 저에게 더 좋을 것입니다.

미리 감사드립니다.

OnTimer()를 사용합니다.

TimeLocal()을 사용하면 모양이 더 좋아지지만 브로커 시간대와 동기화되지 않습니다.

TimeCurrent()를 사용하면 브로커와 동기화되지만 틱이 도착하는 시점에 따라 지연되고 "점프" 초가 될 수 있습니다. 이 예에서는 문제를 강조 표시합니다.

#property strict

int OnInit ()
  {
   EventSetTimer ( 1 );
   return ( INIT_SUCCEEDED );
  }

void OnTimer ()
  {
   Comment ( StringFormat ( "%s - Local\n%s - Broker" , TimeToString ( TimeLocal (), TIME_SECONDS ), TimeToString ( TimeCurrent (), TIME_SECONDS )));
  }
 

#시간 - 휴무

honest_knave :

OnTimer()를 사용합니다.
TimeLocal()을 사용하면 모양이 더 좋아지지만 브로커 시간대와 동기화되지 않습니다.
TimeCurrent()를 사용하면 브로커와 동기화되지만 틱이 도착하는 시점에 따라 지연되고 "점프" 초가 될 수 있습니다. 이 예에서는 문제를 강조 표시합니다.

#property strict

int OnInit ()
  {
   EventSetTimer ( 1 );
   return ( INIT_SUCCEEDED );
  }

void OnTimer ()
  {
   Comment ( StringFormat ( "%s - Local\n%s - Broker" , TimeToString ( TimeLocal (), TIME_SECONDS ), TimeToString ( TimeCurrent (), TIME_SECONDS )));
  }
완전 유용한 댓글 . 고마워요.
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

전문 고문 - 기타 질문

정직한_나브 , 2016.11.30 01:28

IMHO 모든 로트 계산을 OnChartEvent()와 _lotCalc() 간에 분할하는 것보다 함께 유지하는 것이 좋습니다. 최소/최대/단계를 확인하고 증가/감소를 수행하는 하나의 기능입니다.

void OnChartEvent ( const int       id     , // Event ID
                   const long    & lparam , // Parameter of type long event
                   const double & dparam , // Parameter of type double event
                   const string & sparam   // Parameter of type string events
                  )
{
    _lotCalc();
     //-------Process Button---------------------------------------------------------|
     if ( sparam == _btnLotMinus )
    {
         ObjectSetInteger ( 0 , sparam , OBJPROP_STATE , false );
         _lotSize = fmax (_lotMin, _lotSize-_lotStep);
        _calcUpdade( CALC_CHANGE_LOT );
         printf ( " | Lot: %.2f  " , _lotSize );
         return ;
    }   //---if Close
     //                          ...
}

void _lotCalc()
{
     //---
    _lotMin  = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN   );
    _lotMax  = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX   );
    _lotStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );

     //---
}

#로트스텝 - 재오픈

@honest_knave - Lot Size 및 Lot Step에 대해 큰 도움을 주셔서 감사합니다.

따라서 " Lot Size >= ( Lot Step * 100 ) " " Lot Step * 100 "만큼 Lot 단계가 증가할 때 코드의 이 부분을 개선하면 됩니다.

// lot plus
if (sparam==lotbuttonplus)
  {
   if (lotsize>=(lotstep* 100 ))
     {
      lotstep=lotstep* 100 ;
       Print ( "lot step: " ,lotstep);
     }

   lotmaxdivide=lotmax/lotmax *(lotvalue* 10 );
   lotsize= fmin (lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep* 10 : lotstep));

// global variable
   infoupdate();

   printf ( "Lot: %.2f " ,lotsize);
   ObjectSetInteger ( 0 ,sparam, OBJPROP_STATE , false );
   return ;
  }

미리 감사드립니다.

사유: