KimIV의 유용한 기능 - 페이지 87

 
keekkenen писал(а) >>

아니오, 그것은 작동하지 않습니다.. 하나의 주문 - 하나의 로트, 로트 3으로 주문을 열면 원하는대로 로트를 나눌 수 없습니다 - 처음 1, 1, 1 - 주문이 완전히 마감되었습니다 , 즉, 주문이 열린 것과 동일한 로트로 마감되었습니다. 부분적으로 주문을 마감할 수 없습니다.

당신은 틀렸습니다, 나는 부분적으로 부지를 폐쇄하는 트롤을 가지고 있습니다

 

새로운 주문은 물론 열리지 않습니까?

 
2009 년 7월 17일 오후 3시 48분
hope писал(а) >> 같지 않습니다. 로트의 1/3이 닫힙니다(조건 중 하나에 따라 - 가격이 +150pp에 도달했다고 가정해 봅시다). 두 번째 1/3은 예를 들어 오프닝에서 +300pp가 되면 닫힙니다.

아니오, 그것은 작동하지 않습니다.. 하나의 주문 - 하나의 로트, 로트 3으로 주문을 열면 원하는대로 로트를 나눌 수 없습니다 - 처음 1, 1, 1 - 주문이 완전히 마감되었습니다 , 즉 주문이 개설된 동일한 로트로 마감되었습니다. 부분적으로 주문을 마감할 수 없습니다.

...........................

".... 많이 쪼개면 안 돼..." - 왜? 오래 전에 기술적으로 구현되었으며 85페이지의 Roger와 KimIV 덕분에 로트를 정규화하여 오류 131에서 벗어났습니다. 또한 "... 하나의 주문 - 하나의 로트, 로트 3으로 주문을 열면 원하는대로 로트를 분할 할 수 없습니다 - 처음 1, 다음 1 ..."은 잘못된 것입니다. 주문 - 로트라고도 함 - 볼륨: 0.03, 0.3, 3...으로 구성되며 부분적으로 조용히 닫힙니다: 0.01, 0.1, 1... 그래서?

 

그리고 내 마지막 요청의 핵심은 다음과 같습니다. 배열에 의존하지 않고 모든 위치를 닫을 수 있지만 표준 계산을 사용하고 유형별로 추가하는 것이 가능합니까?

   BuyTotalOp = 0 ;                                  // Количество Buy ордеров
   SellTotalOp = 0 ;                                // Количество Sell ордеров
   for ( int i = 1 ; i < = OrdersTotal ( ) ; i + + )          // Цикл перебора ордер
       {
       if ( OrderSelect ( i - 1 , SELECT_BY_POS ) = = true ) // Если есть следующий
         {                                        // Анализ ордеров:
         if ( OrderSymbol ( ) ! = Symb ) continue ;        // Не наш фин. инструм
         if ( OrderType ( ) > 1 )                      // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." ) ;
             return ;                              // Выход из start()
           }
         if ( OrderType ( ) = = OP_BUY )
           {
            BuyTotalOp + + ;                          // Счётчик ордеров Buy

나는 지금 배가 피곤하고 바다를 가로질러 항해하며 이 방향으로 항해할지 아니면 방향을 잡고 다른 길을 시도할지 알려주는 등대를 기대하고 있다는 느낌을 받았습니다.

이고르 - 우리가 당신의 가지를 헛되이 찢고 있습니까?

 

예를 들어 다음과 같이 가지각색을 제외하고 모든 것을 하나씩 닫을 수 있습니다.

b,s,s,b,b,s,b 볼륨 1,2,1,2,2,1,2 총 중첩 볼륨 1-2-1+2+2-1+2=3 랏

요약하면, 우리는 매수 3 랏의 합을 구하고 이 매도 3 랏의 양의 카운터를 설정합니다.

그런 다음 닫기 bi를 닫습니다.

*

그러나 질문: 모든 포지션을 청산할 수 있습니까?

예, 스크립트를 사용하여 순차적으로 하나씩 할 수 있습니다. 빠릅니다! 그리고 모든 것...

스크립트 또는 닫기 기능 자체가 두 번 이상 게시되었습니다...

또한 구성한 후 기준에 따라 한 번에 모두 닫을 수 있습니다. 예를 들면 다음과 같습니다.

- 특정 캐릭터로

- 구매만 또는 판매만

- 수익성만

따라서 기준 조합도 가능합니다 ...

 

편리한 조건에 따라 주문을 마감하도록 도와주세요. 그렇지 않으면 작동 하지 않습니다.

미리 감사드립니다

파일:
help.rar  7 kb
 

다 닫아!!!

 void CloseAll ( ) 
{ 
   for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) 
       { 
       if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) = = false ) break ; 
       if ( OrderType ( ) = = OP_BUY        ) OrderClose ( OrderTicket ( ) , OrderLots ( ) , MarketInfo ( OrderSymbol ( ) , MODE_BID ) , 100 ) ; 
       if ( OrderType ( ) = = OP_SELL      ) OrderClose ( OrderTicket ( ) , OrderLots ( ) , MarketInfo ( OrderSymbol ( ) , MODE_ASK ) , 100 ) ; 
       if ( OrderType ( ) = = OP_BUYSTOP    ) OrderDelete ( OrderTicket ( ) ) ; 
       if ( OrderType ( ) = = OP_SELLSTOP ) OrderDelete ( OrderTicket ( ) ) ; 
       if ( OrderType ( ) = = OP_BUYLIMIT ) OrderDelete ( OrderTicket ( ) ) ; 
       if ( OrderType ( ) = = OP_SELLLIMIT ) OrderDelete ( OrderTicket ( ) ) ; 
       }   
}

열린 포즈만 닫습니다.

 void CloseAll2 ( ) 
{ 
   for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) 
       { 
       if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) = = false ) break ; 
       if ( OrderType ( ) = = OP_BUY        ) OrderClose ( OrderTicket ( ) , OrderLots ( ) , MarketInfo ( OrderSymbol ( ) , MODE_BID ) , 100 ) ; 
       if ( OrderType ( ) = = OP_SELL      ) OrderClose ( OrderTicket ( ) , OrderLots ( ) , MarketInfo ( OrderSymbol ( ) , MODE_ASK ) , 100 ) ; 
       } 
}

전화 예.

 // Скрипт. Закрыть все ордера.mq4 -----------------------------------
#include <WinUser32.mqh> 

void start ( ) 
   { 
   if ( MessageBox ( "Закрыть (удалить) все ордера?" ,
   "Скрипт" , MB_YESNO | MB_ICONQUESTION ) ! = IDYES ) return ; 
   CloseAll ( ) ; 
   } 

종료 스크립트를 완료합니다.

 // Скрипт. Закрыть все.mq4 -----------------------------------
#property copyright "herurg@bk.ru" 
#include <WinUser32.mqh> 

void start ( ) 
   { 
   if ( MessageBox ( "Закрыть (удалить) все ордера?" ,
   "Скрипт" , MB_YESNO | MB_ICONQUESTION ) ! = IDYES ) return ; 
   CloseAll ( ) ; 
   } 

void CloseAll ( ) 
{ 
   for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) 
       { 
       if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) = = false ) break ; 
       if ( OrderType ( ) = = OP_BUY        ) OrderClose ( OrderTicket ( ) , OrderLots ( ) , MarketInfo ( OrderSymbol ( ) , MODE_BID ) , 100 ) ; 
       if ( OrderType ( ) = = OP_SELL      ) OrderClose ( OrderTicket ( ) , OrderLots ( ) , MarketInfo ( OrderSymbol ( ) , MODE_ASK ) , 100 ) ; 
       if ( OrderType ( ) = = OP_BUYSTOP    ) OrderDelete ( OrderTicket ( ) ) ; 
       if ( OrderType ( ) = = OP_SELLSTOP ) OrderDelete ( OrderTicket ( ) ) ; 
       if ( OrderType ( ) = = OP_BUYLIMIT ) OrderDelete ( OrderTicket ( ) ) ; 
       if ( OrderType ( ) = = OP_SELLLIMIT ) OrderDelete ( OrderTicket ( ) ) ; 
       }   
}
 

김 당신이 최고입니다. 나는 당신에게 내 모자를 벗습니다.

나는 당신의 모든 기능을 연구했지만 여기에 하나 또는 garazd가 없습니다. 이제 나는 함수를 쓸 때 머리에서 쓰지만 머리에서 당신의 함수를 쓴다 :-)

나는 프로그래머로서의 경력을 시작할 때 당신의 유용한 기능을 많이 공부했습니다.

고맙습니다.

 
gince >> :

편리한 조건에 따라 주문을 마감하도록 도와주세요. 그렇지 않으면 작동하지 않습니다.

미리 감사드립니다

설명

주문을 마감하는 전략은 중요하지 않으며 무엇이든 될 수 있습니다. 주문을 마감하는 Kim의 기능을 도와주세요.


 int start ( )
{
  //----
  //Print (ExpertName);
  if ( Bars < 20 ) return ( 0 ) ;
  if ( CheckNevBar )
  if ( ! NevBar ( ) ) return ( 0 ) ;
   
  TradesInThisSymbol = ExistPositions ( sy ) ;
  if ( TradesInThisSymbol > 0 ) return ( 0 ) ;
   
  if ( AccountFreeMargin ( ) < MarginMin ) 
  {
  //Print("Not enough money to trade Strategy:", ExpertName);
  return ( 0 ) ;
  }
  sy = Symbol ( ) ;
  Lots = GetSizeLot ( sy , LotsWayChoice , LotsPercent , LotsDeltaDepo , LotsDepoForOne , LotsMax ) ;
   
   
  if ( CheckForOpen_Sell ( ) )
  OpenPosition ( sy , OP_SELL , Lots ) ;           // Тут  работает
  if ( CheckForOpen_Buy ( ) )
  OpenPosition ( sy , OP_BUY , Lots ) ;            // Тут  работает
  
  if ( CheckForClose_Buy ( ) )
  ClosePositions ( sy , OP_BUY ) ;                 // Тут  у меня что то неработает
  if ( CheckForClose_Sell ( ) )  
  ClosePositions ( sy , OP_SELL ) ;               // Тут  у меня что то неработает
  
  //----
  return ( 0 ) ;
}

//------------------------

bool CheckForClose_Buy ( )
  {
  Indicat_Var ( ) ;
  if ( ExistPositions ( sy , OP_BUY , MagicNumber ) )
  {
  if ( VininI_fast_trend = = - 1 ) return ( true ) ;   // Тут любое условие на закрытие
  //if(BB_MACD_2 > 0)return(true);           // Тут любое условие на закрытие
  else
  return ( false ) ;
  }  
  }
//------------------------
bool CheckForClose_Sell ( )
  {
  Indicat_Var ( ) ;
  if ( NumberOfPositions ( sy , OP_SELL , MagicNumber ) > 0 )
  {
  if ( VininI_fast_trend = = 1 ) return ( true ) ;         // Тут любое условие на закрытие
  //if(BB_MACD_1 > 0)                             // Тут любое условие на закрытие
  //return(true);
  else
  return ( false ) ;  
  }
  }
 
여기에서 무언가가 작동하지 않는다는 것은 닫히지 않는다는 의미이며 오류가 발생하지 않습니다.