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

 

글쎄, 질문이 없기 때문에 계속하자 ...

ModifyOrder() 함수.

ModifyOrder 기능은 미리 선택된 하나의 주문에 대해 하나 이상의 가격 수준을 변경하도록 설계되었습니다. 여기서 주문은 보류 중인 지정가 또는 지정가 주문과 매수 또는 매도 시장 주문, 즉 포지션을 모두 의미합니다. 위치의 경우 ModifyOrder 기능을 사용하여 StopLossTakeProfit 의 두 가지 가격 수준을 변경할 수 있으며, 보류 중인 주문의 경우 이에 추가하여 OpenPrice 설정 가격도 변경할 수 있습니다. 변경된 가격 수준은 매개변수로 ModifyOrder 함수에 전달됩니다. 매개변수가 음수이면 해당 가격 수준은 변경되지 않습니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    cl - цвет значка модификации                                            |
//+----------------------------------------------------------------------------+
void ModifyOrder ( double pp =- 1 , double sl = 0 , double tp = 0 , color cl = CLR_NONE ) {
  bool   fm ;
  double op , pa , pb , os , ot ;
  int    dg = MarketInfo ( OrderSymbol () , MODE_DIGITS ) , er , it ;
 
  if ( pp <= 0 ) pp = OrderOpenPrice () ;
  if ( sl < 0 ) sl = OrderStopLoss () ;
  if ( tp < 0 ) tp = OrderTakeProfit () ;
  
  pp = NormalizeDouble ( pp , dg ) ;
  sl = NormalizeDouble ( sl , dg ) ;
  tp = NormalizeDouble ( tp , dg ) ;
  op = NormalizeDouble ( OrderOpenPrice () , dg ) ;
  os = NormalizeDouble ( OrderStopLoss ()  , dg ) ;
  ot = NormalizeDouble ( OrderTakeProfit () , dg ) ;
 
  if ( pp != op || sl != os || tp != ot ) {
    for ( it = 1 ; it <= NumberOfTry ; it ++ ) {
      if ( ! IsTesting () && ( ! IsExpertEnabled () || IsStopped ())) break ;
      while ( ! IsTradeAllowed ()) Sleep ( 5000 ) ;
      RefreshRates () ;
      fm = OrderModify ( OrderTicket () , pp , sl , tp , 0 , cl ) ;
      if ( fm ) {
        if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
      } else {
        er = GetLastError () ;
        pa = MarketInfo ( OrderSymbol () , MODE_ASK ) ;
        pb = MarketInfo ( OrderSymbol () , MODE_BID ) ;
        Print ( " Error( " , er , " ) modifying order: " , ErrorDescription ( er ) , " , try " , it ) ;
        Print ( " Ask= " , pa , "  Bid= " , pb , "  sy= " , OrderSymbol () ,
              "  op= " + GetNameOP ( OrderType ()) , "  pp= " , pp , "  sl= " , sl , "  tp= " , tp ) ;
        Sleep ( 1000 * 10 ) ;
      }
    }
  }
}
 

ModifyOrder() 함수 사용의 예.

가장 먼저 나는 이미 반복적으로 질문을 받은 예를 제시하기로 결정했습니다. 이것은 시장 주문 Market Watch시장 실행 조건에서 포지션을 여는 것입니다. 이는 시장 가격으로 포지션을 오픈하는 주문을 하는 동시에 보류 중인 주문을 첨부하는 것이 불가능한 경우입니다. Market Watch 조건에서 이러한 개시는 두 단계로 수행되어야 합니다. 먼저 포지션을 개설한 다음 보류 중인 주문을 첨부합니다. 즉, StopLossTakeProfit 가격 수준을 설정합니다.

1. 현재 상품의 0.1랏을 매수하고 30포인트의 손절매를 설정합니다.

 int ti = OpenPosition ( NULL , OP_BUY , 0.1 ) ;
if ( OrderSelect ( ti , SELECT_BY_TICKET ))
  ModifyOrder ( - 1 , Ask - 30 * Point , - 1 , clModifyBuy ) ;

2. 현재 상품의 0.15랏을 매도하고 SL=45, TP=99로 설정합니다.

 int ti = OpenPosition ( NULL , OP_SELL , 0.15 ) ;
if ( OrderSelect ( ti , SELECT_BY_TICKET ))
  ModifyOrder ( - 1 , Bid + 45 * Point , Bid - 99 * Point , clModifySell ) ;
예고편에서 예제가 있는 작업 스크립트.
파일:
 
Igor, 주문 마감 기능이 있습니까(Close 및 CloseBy 둘 다)?
 
Lukyanov :
Igor, 주문 마감 기능이 있습니까(Close 및 CloseBy 둘 다)?
닫기 - 예, CloseBy - 아니요.
 
알파벳순으로 닫기는 ModifyOrder 함수 전에 있어야 합니다 ;-)
 
Lukyanov :
알파벳순으로 닫기는 ModifyOrder 함수 전에 있어야 합니다 ;-)
네, 맞습니다... 먼저 열기, 다음 수정, 마지막으로 닫기 ;-)
 

논리... ;)

뻔뻔함을 "기능 전환"이라는 주제에 대한 작은, 하나의 게시물, 교육 프로그램으로 간주하지 않습니까?
지금까지 나에게 이것은 어두운 논리적 이념의 숲입니다 ...
(하지만 아니, 아니...)

 
kombat писал (а):
뻔뻔함을 "기능 전환"이라는 주제에 대한 작은, 하나의 게시물, 교육 프로그램으로 간주하지 않습니까?
아뇨, 안 해요. 제 기능과 관련하여 질문이 있으시면 언제든지 환영합니다. 최선을 다해 답변해 드리겠습니다...
 

감사해요...
그리고 물론 서두르지 않습니다 ... 서두를 곳이 없습니다.
시장은 우리에게서 도망치지 않을 것입니다 ... :)))

 
kombat писал (а):
감사해요...
그리고 물론 서두르지 않습니다 ... 서두를 곳이 없습니다.
시장은 우리에게서 도망치지 않을 것입니다 ... :)))
나는 사실 당신의 질문을 기대하고 있었습니다. 내 기능을 사용하는 영역에서 정확히 무엇을 설명해야 하는지를 직접적으로 나타내는 특정 질문.