KimIVの便利な機能 - ページ 7

 

では、質問もないので、続けますが...。

ModifyOrder()関数。

FunctionModifyOrder は、あらかじめ選択された 1 つの注文の 1 つまたは複数の価格水準を変更するために設計されています。ここでいう保留中の注文とは、指値 注文や逆指値 注文、また市場での買い 注文や売り 注文、つまりポジションとして理解されます。ModifyOrder 関数を使用すると、ポジションのStopLossと TakeProfitの 2つの価格レベルを変更することができ、保留中の注文については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()関数の使用例です。

これまで何度も聞かれたことのある、まさにその例を挙げることにしたのです。成行 注文の実行という 意味でのポジションのオープンです。マーケットウォッチ それは、市場価格でポジションを建てる注文と、それに付随する保留注文を同時に出すことができない場合である。まず、ポジションを建て、そのポジションに注文を付け、StopLossと TakeProfitの 価格水準を設定します。

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の両方)はありますか?
Closeはあるが、CloseByがない。
 
Close in alphabetical orderはModifyOrderの前に置くべき ;-)
 
Lukyanov:
Close in alphabetical orderはModifyOrderの前に置くべき ;-)
はい、その通りです...。まず開き、次に修正し、最後に閉じる ;-)
 

なるほどね...。;)

この際、「Transmission to Function」というテーマで、1記事だけリベンジしてみるのはいかがでしょうか?
今のところ、私にとっては暗い論理思想の森です...。
(いや、そんなことはないのですが...)。

 
kombat писал (а):
Transmission to Function」というテーマで、ワンポストの教育を受けるのは生意気だと思いませんか?
いいえ、そんなことはしません。私の機能に関しては、いつでもどんな質問でもOKです。全部に答えようとすると...。
 

ありがとうございます...
もちろん、急ぐこともないのですが...。は、急ぐ必要はない。
マーケットは逃げない...。:)))

 
kombat писал (а):
ありがとうございます...
もちろん、急ぐこともないのですが...。は、急ぐ必要はない。
マーケットは逃げない...。:)))
実は、あなたからの質問を期待していたんです。具体的な質問、私の機能の使用に関して明らかにする必要があることを直接示す。