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

 
Alexey Viktorov :

유일한 방법

감사합니다. 필요한 것만!

 

안녕하세요!

이 문제에 대해 조언해 주십시오.

대기 중인 주문이 접수되었습니다.

 bool send1= OrderSend ( Symbol (), OP_BUYSTOP ,Lots,Price, 3 ,SL,TP, NULL ,MagicNumber, 0 , clrGreen );

그런 다음 연 후 후행을 만들려고합니다.

 {
 for ( int i= 0 ; i< OrdersTotal (); i++) 
  {
   if ( OrderSelect (i, SELECT_BY_POS ))
   if ( OrderSymbol ()== Symbol ()|| OrderMagicNumber ()==MagicNumber)
   if ( OrderType ()== OP_BUY )
   {
   if (TrailingStop> 0 )  
    {                 
   if ( Bid - OrderOpenPrice ()>TrailingStop)
     {
   if ( OrderStopLoss ()< Bid -TrailingStop)
      {
     OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TrailingStop, OrderTakeProfit (), 0 , clrRed );
      }
     }
    }
   }
  }
 }

역시 개봉 후에는 주문이 OP_BUY가 되겠죠? 캐치가 무엇입니까? 왜 이 변형에서 후행이 작동하지 않습니까?

 
YanSay :

안녕하세요!

이 문제에 대해 조언해 주십시오.

대기 중인 주문이 접수되었습니다.

그런 다음 연 후 후행을 만들려고합니다.

역시 개봉 후에는 주문이 OP_BUY가 되겠죠? 캐치가 무엇입니까? 왜 이 변형에서 후행이 작동하지 않습니까?

100500 이유. 첫 번째는 Bid-TrailngStop이 정규화되지 않은 것이 분명합니다. 정지 수준에 더 가까울 수 있으며 그 다음에도 웁스입니다.
 
YanSay :

안녕하세요!

이 문제에 대해 조언해 주십시오.

대기 중인 주문이 접수되었습니다.

그런 다음 연 후 후행을 만들려고합니다.

역시 개봉 후에는 주문이 OP_BUY가 되겠죠? 캐치가 무엇입니까? 왜 이 변형에서 후행이 작동하지 않습니까?

핍에서 TrailingStop? 그런 다음 Point를 곱해야 합니다.
 

제가 질문을 잘못했네요 죄송합니다. 맥락에서 벗어났습니다.

나는 후행을 확인하기 위해 특별히 코드를 만들었습니다. 거래가 열렸지만 후행은 막다른 골목에서 꼬이지 않는 즉시 작동하지 않습니다(

 //Вводные
#define MagicNumber 150
double SL= 0 ;                         //Stop Loss
input int Trailing= 100 ;             //Трэйлинг

//Код

void OnTick ()
{
 if ( OrdersTotal ()== 0 )
 {
   if ( TimeCurrent ()> StrToTime ( "17:59" )&& TimeCurrent ()< StrToTime ( "18:01" ))
  {
SL = Low [ 1 ]- Point ; //Стоп лосс
bool send1= OrderSend ( Symbol (), OP_BUY , 1 , Bid , 30 ,SL, 0 , NULL ,MagicNumber, 0 , clrNONE );
  }
 }
 if ( OrdersTotal ()> 0 )
   {
       for ( int i= 0 ; i< OrdersTotal (); i++)
    {
   bool select1= OrderSelect (i, SELECT_BY_POS );
   if ( OrderMagicNumber () == MagicNumber && OrderSymbol () == Symbol ())
     {
   if ( OrderType ()== OP_BUY )
      {
     if ( NormalizeDouble ( Ask - OrderStopLoss (), Digits )> NormalizeDouble (Trailing, Digits ))
     bool modify1= OrderModify ( OrderTicket (), 0 , Ask -Trailing, OrderTakeProfit (), 0 ,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay :

제가 질문을 잘못했네요 죄송합니다. 맥락에서 벗어났습니다.

나는 후행을 확인하기 위해 특별히 코드를 만들었습니다. 거래가 열렸지만 후행은 막다른 골목에서 꼬이지 않는 즉시 작동하지 않습니다(

위의 질문에 답변했습니다.
 
Vladislav Andruschenko :
위의 질문에 답변했습니다.
정말 감사합니다, 도움이 되었습니다!
 
YanSay :
정말 감사합니다, 도움이 되었습니다!

여전히 문제가 있습니다.

주기는 직접적이지만 반대로 해야 합니다. 직접 주기를 사용하면 후행으로 그 중 하나가 닫힌 후 위치를 건너뜁니다.

최소 정차 거리(StopLevel) 확인 안 함 - 정류소가 허용된 최소 거리보다 가격에 더 가까울 경우 수정 오류가 발생 합니다(플로팅 스프레드를 잊지 마세요).

아마도 다른 것 - 나는 대각선으로 보았습니다 - 당신이 이미 답을 받았기 때문에 지나가는 것입니다.

추신. 더 많이 보았다:

 if ( NormalizeDouble ( Ask - OrderStopLoss (), Digits )> NormalizeDouble (Trailing, Digits ))

이러한 검사는 두 값을 모두 정규화하고 검사해도 결과가 다시 정규화되지 않기 때문에 정규화 검사의 의미가 없습니다.

두 개의 이중 값 의 정규화된 차이 를 확인해야 합니다. 두 개의 정규화된 값을 비교하고 있습니다.

 
Artyom Trishkin :

여전히 문제가 있습니다.

주기는 직접적이지만 반대로 해야 합니다. 직접 주기를 사용하면 후행으로 그 중 하나가 닫힌 후 위치를 건너뜁니다.

최소 정차 거리(StopLevel) 확인 안 함 - 정류소가 허용된 최소 거리보다 가격에 더 가까울 경우 수정 오류가 발생 합니다(플로팅 스프레드를 잊지 마세요).

아마도 다른 것 - 나는 대각선으로 보았습니다 - 당신이 이미 답을 받았기 때문에 지나가는 것입니다.

추신. 더 많이 보았다:

이러한 검사는 두 값을 모두 정규화하고 검사해도 결과가 다시 정규화되지 않기 때문에 정규화 검사의 의미가 없습니다.

두 개의 이중 값 의 정규화된 차이 를 확인해야 합니다. 두 개의 정규화된 값을 비교하고 있습니다.

이와 같이?

for (int i = OrdersTotal() - 1; i >= 0; --i)
 if ( NormalizeDouble (( Ask - OrderStopLoss ()>Trailing* Point ), Digits ))
 
the size of local variables is too large (more than 512 kb)
오류는 무엇을 의미합니까?


두 개의 객체가 있는 함수가 있습니다.

 bool               CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                       int dir);

클래스 중 하나에는 4000개 이상의 필드(대부분 열거형)가 있는 구조체가 있습니다.

이 오류를 어떻게 해야 합니까?