「KimIVの便利な機能」のみ。

 

すべての関数はこのスレッドから取得されます-http ://forum.mql4.com/ru/11287 、スレッドには各関数の詳細な説明とその使用例が含まれています

コンテンツ

ページ# 1SetOrder-注文設定。バックテストの関数バージョン。 ExistOrders-注文の存在のフラグを返しますExistPositions-位置の存在のフラグを返しますOpenPosition-位置を開きます。バックテストの関数バージョン。 OpenPosition-ポジションを開き、そのチケットを返します。オンラインの場合。メッセージ-コメントとログにメッセージを表示しますGetNameTF-時間枠の名前を返しますGetNameOP-取引操作の名前を返しますModifyOrder-1つの事前に選択された注文の変更。 DeleteOrders-注文を削除します。バックテストの関数バージョン。 DeleteOrders-注文を削除します。オンラインの場合。 FindNearFractal-最も近いフラクタルを検索しますExistOrdersByLot-ロットサイズによる注文の存在のフラグを返します。 GetLotLastOrder-最後に発注された注文のロットサイズを返します。- 1GetOrderOpenPrice-最後の注文の価格を返します。0。IndexByTicket-チケットの注文または位置のインデックスを返します。
2ページ
NumberOfOrders-注文数を返します。

ClosePosBySelect-事前に選択された1つの位置を閉じます。

ClosePosBySizeProfitInCurrency-特定の値の預金通貨で利益を上げているポジションをクローズします

ClosePosBySizeLossInCurrency-預金通貨での損失が特定の値を超えたポジションをクローズします

ClosePositions-市場価格でポジションをクローズ

ClosePosFirstProfit-最初に収益性の高い市場価格でポジションをクローズ

ClosePosWithMaxProfitInCurrency-預金通貨で最大の正の利益を持つ1つのポジションをクローズします

DistMarketAndPos- 市場と最も近い位置の間のポイントでの距離を返します

ExistOPNearMarket-市場の近くにポジションまたは注文が存在することを示すフラグを返します

ExistPosByPrice-始値でのポジションの存在のフラグを返します

GetAmountLotFromOpenPos-オープンポジションのロット数を返します

ページ#3
GetIndexByTicket-チケットごとの注文またはポジションのインデックスを返します。

相関-2つの系列の相関を返します。

GetIndexLastPos-最後に開いた位置のインデックスまたは-1を返します

GetLotLastPos-最後に開いた位置のロットサイズまたは-1を返します

GetMaxLotFromOpenPos-オープンポジションから最大ロットサイズを返します

GetMinLotFromOpenPos-オープンポジションから最小ロットサイズを返します

NumberOfPositions-位置の数を返します。

GetProfitFromDateInCurrency-特定の日付以降にクローズされたポジションの預金通貨での合計利益を返します

GetProfitOpenPosInCurrency-オープンポジションの総利益を預金通貨で返します

GetProfitOpenPosInPoint-オープンポジションの総利益をポイントで返します

GetTicketLastPos-最後に開いたポジションのチケットまたは-1を返します

ページ#4
GetTypeLastClosePos-最後に閉じた位置のタイプまたは-1を返します

GetTypeLastOpenPos-最後に開いた位置のタイプまたは-1を返します

isCloseLastPosByStop-停止によって最後の位置を閉じるためのフラグを返します

isCloseLastPosByTake-テイクによって最後の位置を閉じるためのフラグを返します。

isLossLastPos-最後の位置の損失フラグを返します。

isTradeToDay-今日のトレードフラグを返します

NumberOfBarCloseLastPos-最後の位置の終了バーの番号または-1を返します。

NumberOfBarOpenLastPos-最後の位置のオープンバーの番号または-1を返します。

NumberOfLossPosToday-今日クローズされた負けポジションの数を返します。

PriceCloseLastPos-最後にクローズされたポジションの終値を返します。


ページ#5
PriceOpenLastPos-最後のオープンポジションの始値を返します。

PriceOpenLastClosePos-最後に閉じたポジションの始値を返します。

PriceOpenNearPos-最も近いポジションの始値を返します。

TicketNearPos-市場に最も近いポジションのチケットを始値で返します。

TypeNearPos-市場に最も近いポジションのタイプ、または-1を返します。

TimeOpenLastPos-最後に開いた位置の開始時間を返します。

BubbleSort-配列の要素に対してバブルソートを実行します。

BarsBetweenLastFractals-最後の2つのフラクタルの間のバーの数を返します。

SecondsAfterCloseLastPos-最後の位置が閉じられてからの秒数を返します。

SecondsAfterOpenLastPos-最後の位置が開かれてからの秒数を返します。

DeleteOppositeOrders-反対の注文位置を削除します

ArraySearchDouble-配列内の要素を値で検索し、見つかった要素のインデックス、または-1を返します

ArraySearchInt-配列内の要素を値で検索し、見つかった要素のインデックス、または-1を返します。

ArraySearchString-値で配列要素を検索し、見つかった要素のインデックス、または-1を返します

GetLotLastClosePos-最後に閉じた位置のロットサイズまたは-1を返します

ArrayMax-配列内の最大要素の値を返します。


ページ#6
ArrayMin-配列内の最小要素の値を返します

GetExtremumZZBar-ZigZag極値バーの数値をその数値で返します。

ArrayAvg-配列要素の算術平均を返します。

ArrayAvGeom-配列要素の幾何平均を返します。

SetHLine-OBJ_HLINEオブジェクトを水平線に設定します
SetVLine-OBJ_VLINEオブジェクトを垂直線に設定します
SetTLine-OBJ_TRENDオブジェクトをトレンドラインに設定します

SetTLineByAngle-トレンドラインのOBJ_TRENDBYANGLEオブジェクトを角度で設定します

SetArrow-チャート上のアイコン、OBJ_ARROWオブジェクトを設定します。

SetLabel-テキストラベル、OBJ_LABELオブジェクトを設定します。

CrossPointOfLines-2本の線の交点の座標を計算します。各線は、その点の座標のペアによって与えられます。

SetRegression-OBJ_REGRESSIONオブジェクトを線形回帰チャネルに設定します。

EquationDirect-直線の方程式。線との交点でのXのY値を計算します。
GetArrowInterval-シグナルポインタを設定するための間隔を返します
GetArrowInterval-シグナルポインタを設定するための間隔を返します
FindNearFractal-最も近いフラクタルを検索します。価格レベルを返します。
GetExtremumZZBar-ZigZag極値バーの数値をその数値で返します。
GetExtremumZZPrice-ZigZag極値をその数で返します。

GetFractalBar-フラクタルバーの数値をその数値で返します。

GetNearestDownFractal-最も近いダウンフラクタルの価格レベルを返します

GetNearestUpFractal-最も近いアップフラクタルを返します


ページ#7
CorrectTF-サポートされている最も近いMT4に時間枠を修正します。
DateBeginQuarter-四半期の開始日を返します
DateOfMonday-月曜日の日付を週番号で返します

フィボナッチ数-フィボナッチ数列の要素を序数で返します。
GetNameMA-MAメソッドの名前を返します。
GetPriceDiffInPoint-2つのバー間のポイントの価格差を返します。

GetTypePrice-価格タイプ名を返します。
ArrayLR-線形回帰値の配列を生成します。
ArrayMo-モードを返します-分布密度曲線の最大値。

ExistOrdersByPrice-設定された価格での注文の存在のフラグを返します

ClosePosBySelect-事前に選択された1つの位置を閉じます
CountOrders-タイプごとに注文数を計算します。
ModifiedOrder-注文の変更。バックテストの関数バージョン。

IIFc-条件に応じて2つの値のいずれかを返します。

IIFd-条件に応じて2つの値のいずれかを返します。
IIFi-条件に応じて2つの値のいずれかを返します。
IIF-条件に応じて2つの値のいずれかを返します。
ExistInHistoryCloseBetween-日付の間にクローズ(削除)されたポジションまたはオーダーの履歴に存在するフラグを返します。

ExistInHistoryOpenBetween-日付の間に開かれた(設定された)ポジションまたは注文の履歴に存在するフラグを返します。

ExistInHistoryToDay-今日の履歴に注文またはポジションが存在することのフラグを返します

TakeProfitLastPos-最後のオープンポジションのTakeProfit価格または-1を返します。

ページ#8
TakeProfitLastClosePos-最後に閉じたポジションのTakeProfit価格または-1を返します。

MovingInWL-ストップレベルを損益分岐点に移動

SimpleTrailing-単純なトロール網で位置を追跡する

ArrayZ-数値シリーズのZスコアを返します。
ArrayDeleteInt-指定されたインデックスの配列要素を削除します。新しい配列のサイズを返します。何も削除できない場合は-1を返します。
ArrayDeleteDouble-指定されたインデックスの配列要素を削除します。新しい配列のサイズを返します
。何も削除できない場合は-1を返します。
ArrayDeleteString-指定されたインデックスの配列要素を削除します。新しい配列のサイズ、つまり-1を返します
何も削除できなければ。
ArrayInsertDouble-指定されたインデックスに配列要素を挿入します。新しい配列のサイズを返します。
BubbleSort2-二次元配列の要素に対してバブルソートを実行します。
GetTypeLastDeleted-最後に削除された注文のタイプまたは-1を返します
iBarLargest-最大のバーのインデックス、または-1を返します。
iBarOfDayCalc-1日の始まりから計算されたバー番号を返します。バーの番号付けは1から始まります(1)
iBarOfDayReal-1日の始まりからのバーの実数を返します。
NameDayOfWeek-曜日の名前を返します
NormalizeLot-取引されたロットの正規化された値を返します。
NormalizePrice-ティックサイズに正規化された価格値を返します。
WeekOfMonth-日付を指定して月の週番号を返します
ClosePosBySortLots-ロットサイズでソート順に位置を閉じます。
AddLeadingZero-文字列Sを長さKに等しくするために、文字列Sに十分な先行ゼロ「0」を追加します。

toTime-2つまたは3つの整数を時間形式の文字列に変換します

ページ#9
StringLower-小文字の文字列を返します

StringUpper-大文字の文字列を返します

StringToArrayDouble-実数を文字列から配列に転送します

StringToArrayInt-整数値を文字列から配列に転送します

StrSplit-文字列を要素の配列に分割する

StrTran-部分文字列の置換

MovingInWL-ストップレベルを損益分岐点に移動

isTradeTimeString-時間取引有効化フラグを返します。

isTradeTimeInt-時間取引許可フラグを返します。


さらに:
1つのアーカイブ内のすべての機能。
すべての関数は、リンクされたライブラリの形式になっています。


 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия  : 13.06.2007                                                      | //|  Описание : Установка ордера. Версия функции для тестов на истории.        | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента   (NULL или "" - текущий символ)          | //|    op - операция                                                           | //|    ll - лот                                                                | //|    pp - цена                                                               | //|    sl - уровень стоп                                                       | //|    tp - уровень тейк                                                       | //|    mn - Magic Number                                                       | //|    ex - Срок истечения                                                     | //+----------------------------------------------------------------------------+ void SetOrder( string sy, int op, double ll, double pp,                double sl= 0 , double tp= 0 , int mn= 0 , datetime ex= 0 ) {    color clOpen;    int    err, ticket;      if (sy== "" || sy== "0" ) sy= Symbol ();    if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;   ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, "" , mn, ex, clOpen);    if (ticket< 0 ) {     err= GetLastError ();      Print ( "Error(" ,err, ") set " ,GetNameOP(op), ": " ,ErrorDescription(err));      Print ( "Ask=" ,Ask, " Bid=" ,Bid, " sy=" ,sy, " ll=" ,ll,            " pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);   } } //+----------------------------------------------------------------------------+

ExistOrders()関数。

注文存在フラグを返します。順序が設定されているかどうかの質問に答えます。この機能を使用すると、より具体的な注文だけでなく、任意の注文をリクエストできます。要求フィルターは、関数パラメーターを使用して構成されます。

  • sy-楽器の名前に制限を課します。デフォルトでは、パラメータは「」です。制限はありません。つまり、ツールはありません。 NULLを渡すと、注文の選択は現在の機器に制限されます。
  • op-注文タイプに制限を設けます。デフォルトでは、制限はありません。つまり、任意のタイプの注文の存在がチェックされます。有効なパラメータ値は、-1、OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、およびOP_SELLSTOPです。
  • mn-注文の識別(「マジック」)番号に制限を課します。デフォルトでは、制限はありません。つまり、任意のマジックナンバーを持つ注文の存在がチェックされます。
  • ot-注文時間に制限を課します。チェック済み。このパラメータの値よりも後に注文が行われるようにします。デフォルトでは、制限はありません。つまり、任意の設定時間の注文の存在がチェックされます。
 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 12.03.2008                                                     | //|  Описание : Возвращает флаг существования ордеров.                         | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента   (""   - любой символ,                   | //|                                     NULL - текущий символ)                 | //|    op - операция                   (-1   - любой ордер)                    | //|    mn - MagicNumber                (-1   - любой магик)                    | //|    ot - время открытия             ( 0   - любое время установки)          | //+----------------------------------------------------------------------------+ bool ExistOrders( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {    int i, k= OrdersTotal (), ty;      if (sy== "0" ) sy= Symbol ();    for (i= 0 ; i<k; i++) {      if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {       ty=OrderType();        if (ty> 1 && ty< 6 ) {          if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || ty==op)) {            if (mn< 0 || OrderMagicNumber()==mn) {              if (ot<=OrderOpenTime()) return (True);           }         }       }     }   }    return (False); }
Полезные функции от KimIV
Полезные функции от KimIV
  • www.mql5.com
В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанн...
 

ExistPositions()関数です。

未購入・未販売を確認するための設計です。ExistOrders 関数に似ている。デフォルトでは、カレントと他の計器のすべてのポジションをチェックします。フィルター-機能パラメーターの組み合わせで選択範囲を絞り込むことができます。

  • sy- 楽器の名称に制限を加える。デフォルトのパラメータは""で、制限なし、つまりどんな楽器でもOKです。NULLを渡すと、ポジションの選択は現在の楽器に限定されます。
  • op- ポジションタイプ(買い/売り)に制限を設けます。デフォルトでは、制約がない、つまり、どのポジションのタイプもチェックされる。このパラメータに有効な値は-1、OP_BUY、OP_SELLです。
  • mn- ポジションの識別("マジック")番号の制限を適用します。デフォルトでは制約がなく、任意のマジックナンバーの位置がチェックされます。
  • ot- ポジションオープン時間の 制限を適用します。このパラメータの値より後にポジションが開くかどうかチェックされます。デフォルトでは、制約がない、つまり、任意のオープン時間を持つポジションがチェックされます。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}

テスターのOpenPosition()関数。


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Открытие позиции. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color  clOpen;
  double pp;
  int    err, ticket;
 
  if (sy=="") sy=Symbol();
  if (op==OP_BUY) {
    pp=MarketInfo(sy, MODE_ASK); clOpen=clOpenBuy;
  } else {
    pp=MarketInfo(sy, MODE_BID); clOpen=clOpenSell;
  }
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, 0, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") open ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
 

オンライン用のOpenPosition()関数です。


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("OpenPosition(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (pa==0 && pb==0) Message("Проверьте в Обзоре рынка наличие символа "+sy);
      // Вывод сообщения об ошибке
      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  return(ticket);
}
 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Вывод сообщения в коммент и в журнал                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - текст сообщения                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
} 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование таймфрейма                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("UnknownPeriod");
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("Buy Limit");
    case OP_SELLLIMIT: return("Sell Limit");
    case OP_BUYSTOP  : return("Buy Stop");
    case OP_SELLSTOP : return("Sell Stop");
    default          : return("Unknown Operation");
  }
}
 

ModifyOrder()関数。

ModifyOrder 機能は、事前に選択された 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);
      }
    }
  }
}
 

DeleteOrders()関数。テスター版。

DeleteOrders()関数は、BuyLimit、BuyStop、SellLimit、SellStopの注文を削除 するためのものです。DeleteOrders()関数は汎用的な関数で、パラメータで設定された選択条件を満たす特定の注文だけでなく、存在するすべての注文を削除するために使用することが可能です。

sy- 楽器の名称。Strategy Tester では現在のシンボルしか取引できないため、このパラメータは Strategy Tester 版には関係なく、本機能のオンライン版との互換性のためにのみ必要です。テスターでは、""またはNULLを使用することをお勧めします。初期値として、""は任意の記号を意味する。
op
- 取引操作の種類、保留中の注文の種類。5つの値のいずれかが可能である。-1、OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOPのいずれか。初期値の-1は任意の順序を意味する。

mn- MagicNumber、保留中の注文の識別番号。デフォルト値 -1 は任意のMagicNumberを意味する。


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

DeleteOrders()関数。オンライン版


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
 
//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
 
  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}

関数 ExistOrdersByLot()。

指定されたロット数の注文が存在するかどうかのフラグを返します。True- order exists (set),False- order doesn't exist (not set).関数のパラメータを使用して、チェックする注文のリストを制限することができます。

  • sy- 楽器の名称。このパラメータを設定すると、指定した商品の注文のみをチェックします。NULLは 現在の計測器、""(デフォルト)は任意の計測器を意味する。
  • op- 操作、保留中の注文の 種類。有効な値:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP、または-1。デフォルトの値である- 1は、任意のオーダータイプを示す。
  • mn- オーダー識別子(MagicNumber)。初期値の- 1は任意のMagicNumberを意味する。
  • lo- 小数点以下2桁の精度でのロットの大きさ。デフォルト値は0- 任意のロットサイズです。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает флаг существования ордера по размеру лота.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    lo - лот                        ( 0   - любой лот)                      |
//+----------------------------------------------------------------------------+
bool ExistOrdersByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), ot;
  lo=NormalizeDouble(lo, 2);

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (lo<=0 || NormalizeDouble(OrderLots(), 2)==lo) return(True);
          }
        }
      }
    }
  }
  return(False);
}
 

GetLotLastOrder()関数。

最後に発注した注文のロットサイズまたは-1 を返します。関数のパラメータを使用して、チェックする注文のリストを制限することができます。

  • sy- 楽器の名前です。このパラメータが指定された場合、この関数は指定された商品の注文のみをチェックします。NULLは 現在の楽器、""(デフォルト)は任意の楽器を意味します。
  • op- 操作、保留中の注文の 種類。有効な値:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP、または-1。デフォルトの値である- 1は、任意の順序を示す。
  • mn- オーダー識別子(MagicNumber)。デフォルト値-1 は任意のMagicNumberを意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает размер лота последнего выставленного ордера или -1  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
 

GetOrderOpenPrice()関数。

最後にオープンした注文の設定価格または0 を返します。関数パラメータでチェックする注文のリストを制限することができます。

  • sy- 楽器の名前です。このパラメータが指定された場合、この関数は指定された商品の注文のみをチェックします。NULLは 現在の楽器、""(デフォルト)は任意の楽器を意味します。
  • op- 操作、保留中の注文の 種類。有効な値:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP、または-1。デフォルトの値である- 1は、任意の順序を示す。
  • mn- オーダー識別子(MagicNumber)。デフォルト値-1 は任意のMagicNumberを意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает цену установки последнего ордера или 0.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetOrderOpenPrice(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 

IndexByTicket()関数です。

チケット上の注文またはポジションのインデックス(セットオーダーまたはオープンポジションの一般リストにおける序列番号)を返します。IndexByTicket()が 必要なチケットを持つ注文またはポジションを見つけられなかった場合、-1を 返します。関数のパラメータを使用して、チェックする注文やポジションのリストを制限することができます。

  • sy- 楽器の名称。このパラメータを指定すると、指定した商品の注文とポジションのみをチェックします。NULLは 現在の楽器、""(デフォルト)は任意の楽器を意味します。
  • op-取引操作、保留中の注文またはポジションのタイプ。有効な値:OP_BUY、OP_BUYLIMIT、OP_BUYSTOP、OP_SELL、OP_SELLLIMIT、OP_SELLSTOP、または-1。デフォルトの値である- 1は、任意の順序または位置を示す。
  • mn- 注文またはポジションの識別子(MagicNumber)。デフォルト値-1 は任意のMagicNumberを意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.04.2007                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int IndexByTicket(int ti, string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}
理由: