KimIV'ten faydalı özellikler - sayfa 7

 

Neyse, soru kalmadığına göre devam edelim...

ModifyOrder() işlevi.

ModifyOrder işlevi, önceden seçilmiş bir siparişin bir veya daha fazla fiyat seviyesini değiştirmek için tasarlanmıştır. Burada bir emir, hem bekleyen bir Limit veya Stop emri hem de bir Al veya Sat piyasa emri, yani bir pozisyon anlamına gelir. Bir pozisyon için ModifyOrder fonksiyonunu kullanarak StopLoss ve TakeProfit olmak üzere iki fiyat seviyesini değiştirebilir, bekleyen bir emir için bunlara ek olarak OpenPrice ayar fiyatını da değiştirebilirsiniz. Değiştirilen fiyat seviyeleri, ModifyOrder işlevine parametre olarak aktarılır. Herhangi bir parametre negatifse, karşılık gelen fiyat seviyesi değişmeyecektir.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() işlevini kullanma örnekleri.

İlk önce, bana defalarca sorulan örnekler vermeye karar verdim. Bu, Piyasa İzleme piyasa emirlerinin piyasa yürütme koşullarında pozisyonların açılmasıdır. Bu, aynı anda piyasa fiyatından bir pozisyon açmak için bir emir vermek ve buna bekleyen bir emir eklemek imkansız olduğunda. Piyasa İzleme koşullarında böyle bir açılış iki aşamada gerçekleştirilmelidir: önce bir pozisyon açın ve ardından ona bekleyen emirleri ekleyin, yani StopLoss ve TakeProfit fiyat seviyelerini ayarlayın.

1. Mevcut enstrümandan 0.1 lot satın alın ve 30 puanlık bir stop loss ayarlayın

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

2. Mevcut enstrümanın 0.15 lotunu sat ve SL=45, TP=99 olarak ayarla

 int ti = OpenPosition ( NULL , OP_SELL , 0.15 ) ;
if ( OrderSelect ( ti , SELECT_BY_TICKET ))
  ModifyOrder ( - 1 , Bid + 45 * Point , Bid - 99 * Point , clModifySell ) ;
Fragmanda, örneklerle çalışan bir komut dosyası.
Dosyalar:
 
Igor, emirleri kapatmak için bir işlevin var mı (hem sadece Kapat hem de Kapat)?
 
Lukyanov :
Igor, emirleri kapatmak için bir işlevin var mı (hem sadece Kapat hem de Kapat)?
Kapat - evet, CloseBy - hayır.
 
Alfabetik sırayla kapat, ModifyOrder işlevinden önce olmalıdır ;-)
 
Lukyanov :
Alfabetik sırayla kapat, ModifyOrder işlevinden önce olmalıdır ;-)
Evet, doğru... önce Aç, sonra Değiştir ve son olarak Kapat ;-)
 

Mantık... ;)

Küstahlığı "Bir işleve transferler" konusunda küçük, tek gönderi, eğitim programı olarak görmez miydiniz?
Şimdiye kadar, benim için bu karanlık bir mantıksal-ideolojik orman ...
(ama hayır, hayır...)

 
kombat писал (а):
Küstahlığı "Bir işleve transferler" konusunda küçük, tek gönderi, eğitim programı olarak görmez miydiniz?
Hayır, bilmiyorum. Görevlerime ilişkin her türlü soru her zaman açığız. Elimden geldiğince cevaplamaya çalışacağım...
 

Teşekkürler...
Ve elbette acelesi yok ... acele edecek bir yer yok.
Piyasa bizden kaçmaz... :)))

 
kombat писал (а):
Teşekkürler...
Ve elbette acelesi yok ... acele edecek bir yer yok.
Piyasa bizden kaçmaz... :)))
Aslında sizden soru bekliyordum. İşlevlerimi kullanma alanında tam olarak neyi açıklamanız gerektiğini doğrudan belirten özel sorular.
Neden: