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

 
Vitaly Muzichenko :
네, 맞습니다. 이전 화자가 잘못 해석한 스타일로 코드를 작성했을 뿐입니다.

확인하는 것은 어떻습니까?

//+------------------------------------------------------------------+
//|                                                   TestLogics.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link        "https://login.mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int       Value= 0 ;     // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   if (Value> 0 ) Alert ( "1. Количество ордеров=" ,Value);
   else Alert ( "2. Это код после else" );
      {
       Alert ( "3. Ордера отсутствуют" );
      }
  }
//+------------------------------------------------------------------+
중괄호 안의 코드는 if-else 조건에 적용되지 않으며 Value의 값에 관계없이 항상 실행됩니다.
 
Artyom Trishkin :

확인하는 것은 어떻습니까?


중괄호 안의 코드는 if-else 조건에 적용되지 않으며 Value의 값에 관계없이 항상 실행됩니다.

팬케이크는 실제로 이제 원래 코드를 다시 수정했으며 잘못되었습니다. 일종의 곡선을 쓰는 스타일 - 나를 혼란스럽게했습니다.

 

재확인, "추가" 제거

0으로 나누기 가 사라졌습니다

파일:
zero.mq4  5 kb
 
trader781 :

재확인, "추가" 제거

0으로 나누기 가 사라졌습니다

 
trader781 :

재확인, "추가" 제거

0으로 나누기 가 사라졌습니다

제수가 0과 다른지 확인하지 않았기 때문입니다. 주문이 없고 로트가 0일 때 다음 코드를 실행하는 요점은 무엇입니까?

 

수표를 넣어

void ModifyOrders()
  {
   double avg_price= 0 ;
   price= 0 ;
   bool z= true ;
   double orderlots= 0 ;

   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
      && ( OrderMagicNumber ()==Magic) && ( OrderType ()==FindLastOType()))
        {
         price+= OrderOpenPrice ()* OrderLots ();
         orderlots+= OrderLots ();
        }
     }
    
   if (orderlots== 0 ) { return ; } // если ничего нет - выходим
   avg_price= NormalizeDouble (price / orderlots, Digits );
  
   if (FindLastOType()== OP_BUY )     tp= NormalizeDouble (avg_price+TakeProfit* Point (), Digits );
   if (FindLastOType()== OP_SELL )    tp= NormalizeDouble (avg_price-TakeProfit* Point (), Digits );


   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
      && ( OrderMagicNumber ()==Magic) &&( OrderType ()==FindLastOType()))

         z= OrderModify ( OrderTicket (), OrderOpenPrice (), 0 ,tp, 0 );
         if (!z)
         Print ( "Ошибка функции модифицирования" );
     }
  }
 
Vitaly Muzichenko :

수표를 넣어


비탈리 포스톨라케 :


하지만 많은 것을 놓쳤습니다. 감사합니다.
 
trader781 :
하지만 많은 것을 놓쳤습니다. 감사합니다.
네, 놓친 것은 정상이고 , 잡지를 안 읽는 것은 정상이 아닙니다. 거기에 다 적혀 있고, 어느 줄에 오류가 있는지 적혀 있습니다.
 
Vitaly Muzichenko :
네, 놓친 것은 정상이고 , 잡지를 안 읽는 것은 정상이 아니며, 거기에 다 적혀 있습니다.

읽을 생각은 없었다. "시장에서 검증을 위해"라고 되어있습니다. 내 제품은 시장에 나오지 않을 것입니다.

0으로 나누기에 대해.

위의 것은 어떻습니까? 그는 거기에서 주문을 받아야합니다

{
가격+= OrderOpenPrice ()* OrderLots ();
orderlots+= orderlots ();
}
}
     
    if (orderlots== 0 ) { 반환 ; } // 아무것도 없으면 종료
avg_price= NormalizeDouble (가격/주문량, 숫자 );
   
    if (FindLastOType()== OP_BUY ) tp= NormalizeDouble (avg_price+TakeProfit* 포인트 (), 자릿수 );
    if (FindLastOType()== OP_SELL ) tp= NormalizeDouble (avg_price-TakeProfit* 포인트 (), 자릿수 );

 
trader781 :
읽을 생각은 없었다. "시장에서 검증을 위해"라고 되어있습니다. 내 제품은 시장에 나오지 않을 것입니다.

테스터의 로그에 대해 이야기하고 있습니다.

추가됨: 코드를 정상 상태로 빌드하고 검토한 다음 테스터에서 실행하고 오류 로그를 읽습니다. 여기에 코드 스니펫을 게시하고 있습니다.