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

 
Alexander_K2 :

근데 진짜 뭔가 안맞아...

저것들. 나는 OrderSelect를 한 번 하고 그 다음에는 함수에서... 일종의 악마 같은...

  1. 티켓으로 주문을 선택했습니다
  2. 주문건수 확인 기능으로 이동했습니다. 하나 이상의 주문이 있는 경우 사용 가능한 모든 주문이 루프에서 하나씩 선택되어 계산됩니다.
  3. 기능에서 돌아온 후 터미널의 주문 목록에서 가장 마지막에 있던 것이 선택되며, 반드시 티켓에 대해 1단계에서 선택한 것이 아닐 것입니다.
  4. 다음으로 이미 선택한 새 주문의 마감 시간을 확인하고 티켓에서 선택한 것으로 추정되는 주문을 마감하려고 했지만 선택 항목이 이미 손실되었습니다.

단순한 논리...

작업 순서를 따르십시오.

당연히 먼저 수량을 확인한 다음 원하는 주문을 선택한 다음 필요한 작업을 수행해야 합니다.

 
Maxim Kuznetsov :

어떤 방향으로 주문 배열을 보고 계십니까?

"개정" 중에 폐쇄/삭제가 가능한 경우 반대 방향으로 보는 것이 좋습니다. OrdersTotal()-1에서 0까지.

그렇지 않으면 올 수 있습니다 :-)


어떻게 든 나는 이런 식으로 개인 성배 를 거의 발견했습니다 :-)

"시간의 깊이"에서 현재(전부는 아님)로 오래된 주문을 삭제하면 테스터 수익성이 일종의 천국으로 올라갔습니다 :-)

 
Artyom Trishkin :
  1. 티켓으로 주문을 선택했습니다
  2. 주문건수 확인 기능으로 이동했습니다. 하나 이상의 주문이 있는 경우 사용 가능한 모든 주문이 루프에서 하나씩 선택되어 계산됩니다.
  3. 기능에서 돌아온 후 터미널의 주문 목록에서 가장 마지막에 있던 것이 선택되며, 반드시 티켓에 대해 1단계에서 선택한 것이 아닐 것입니다.
  4. 다음으로 이미 선택한 새 주문의 마감 시간을 확인하고 티켓에서 선택한 것으로 추정되는 주문을 마감하려고 했지만 선택 항목이 이미 손실되었습니다.

단순한 논리...

작업 순서를 따르십시오.

분명히 먼저 수량을 확인한 다음 원하는 주문을 선택한 다음 필요한 작업을 수행해야 합니다.

다음과 같이 했습니다.

 RefreshRates ();
         total_orders_NZDUSD=TotalOrders( "NZDUSD.I" );
         if ( OrderSelect (ticket_sell_NZDUSD, SELECT_BY_TICKET )== true )
         {
         ctm_ticket_sell_NZDUSD= OrderCloseTime ();
         order_type_NZDUSD= OrderType ();
             if (total_orders_NZDUSD> 0 )
            {
               if (ctm_ticket_sell_NZDUSD== 0 )
               {
                   if (order_type_NZDUSD== OP_SELL )
                  {
                   double AskNorm= NormalizeDouble ( Ask , Digits );
                   OrderClose (ticket_sell_NZDUSD, 0.01 ,AskNorm, 0 );
                  }
               }
            }
         }

나는 주문 수를 먼저 설정하고 나머지는 모두 설정했습니다.

고마워, 아르템. 그것은 작동합니다 - 나에게서 성배. 이것이 나를 죽인 실수...

 

소수 자릿수를 계산하는 방법?

예를 들어 최소 로트가 0.01이라는 것을 알았습니다.

 MarketInfo ( "EURUSD" , MODE_MINLOT )

이제 여기서 소수점 이하 자릿수가 2임을 어떻게 추론할 수 있습니까?
그런 다음 주문량을 소수점 이하 두 자리로 정규화합니다.

 
multiplicator :

소수 자릿수를 계산하는 방법?

예를 들어 최소 로트가 0.01이라는 것을 알았습니다.

이제 여기서 소수점 이하 자릿수가 2임을 어떻게 추론할 수 있습니까?
그런 다음 주문량을 소수점 이하 두 자리로 정규화합니다.

이걸로 해봐.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot( double lo, bool ro= False , string sy= "" ) {
   double l, k;
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double ls= MarketInfo (sy, MODE_LOTSTEP );
   double ml= MarketInfo (sy, MODE_MINLOT );
   double mx= MarketInfo (sy, MODE_MAXLOT );

   if (ml== 0 ) ml= 0.1 ;
   if (mx== 0 ) mx= 100 ;

   if (ls> 0 ) k= 1 /ls; else k= 1 /ml;
   if (ro) l= MathCeil (lo*k)/k; else l= MathFloor (lo*k)/k;

   if (l<ml) l=ml;
   if (l>mx) l=mx;

   return (l);
}
 
Alekseu Fedotov :

이걸로 해봐.

왜 그런 쓰레기를 제공합니까?

승수 :

소수 자릿수를 계산하는 방법?

예를 들어 최소 로트가 0.01이라는 것을 알았습니다.

이제 여기서 소수점 이하 자릿수가 2임을 어떻게 추론할 수 있습니까?
그런 다음 주문량을 소수점 이하 두 자리로 정규화합니다.

여기 기사 에 완성된 기능이 있습니다.

 //+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckVolumeValue( double volume, string & description )
  {
//--- минимально допустимый объем для торговых операций
   double min_volume= SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   if (volume<min_volume)
     {
       description = StringFormat ( "Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f" ,min_volume);
       return ( false );
     }

//--- максимально допустимый объем для торговых операций
   double max_volume= SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX );
   if (volume>max_volume)
     {
       description = StringFormat ( "Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f" ,max_volume);
       return ( false );
     }

//--- получим минимальную градацию объема
   double volume_step= SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );

   int ratio=( int ) MathRound (volume/volume_step);
   if ( MathAbs (ratio*volume_step-volume)> 0.0000001 )
     {
       description = StringFormat ( "Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f" ,
                               volume_step,ratio*volume_step);
       return ( false );
     }
   description = "Корректное значение объема" ;
   return ( true );
  }

이 함수의 반환 결과에 따라 작업을 추가하는 일만 남습니다.

Какие проверки должен пройти торговый робот перед публикацией в Маркете
Какие проверки должен пройти торговый робот перед публикацией в Маркете
  • www.mql5.com
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
 
열 때 터미널 자체가 필요한 소수 자릿수 로 순서를 정규화한다는 것을 알 수 있습니다.
이렇게 많이 넣었어요
 OrderSend ( Symbol (), OP_BUY , 1.11111111 , Ask , 3 , 0 , 0 );
거래는 1.11의 볼륨으로 시작됩니다.

그래서 어쩌면 당신은 아무것도 정규화 할 필요가 없습니까?
 
multiplicator :
터미널을 열 때 필요한 소수점 이하 자릿수 로 순서를 정규화한다는 것을 알 수 있습니다.
어쩌면 당신은 아무것도 정규화 할 필요가 없습니까?

편집자가 동일한 작업을 수행하는 경우 - 필요하지 않습니다.

 
multiplicator :
터미널을 열 때 필요한 소수점 이하 자릿수 로 순서를 정규화한다는 것을 알 수 있습니다.
어쩌면 당신은 아무것도 정규화 할 필요가 없습니까?

나중에 오류가 발생한 후 오류가 발생하려면 정규화하지 마십시오.

 
Artyom Trishkin :

나중에 오류가 발생한 후 오류가 발생하려면 정규화하지 마십시오.

어떤 이유로 터미널에 오류가 표시되지 않습니다)