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

 

GetPriceDiffInPoint()関数の使用例です。

例えば、現在のチャートの2本目と1本目のバーの間で、pips単位の値とレートの動く方向を計算する必要があるとします。現在のチャートがEURUSD H1であるとします。GetPriceDiffInPoint()関数をデフォルトのパラメータで呼び出します。

Message(GetPriceDiffInPoint());

その結果がこちらです。


GetPriceDiffInPoint()関数は、-23ポイントを返しました。その入手方法を分析してみよう。このために、時間バー2、1、0に垂直線を引いて みましょう。


より小さな時間枠、例えばM5に切り替え、バー2と1の間隔をその上に1つの矩形でマークしてみましょう。

今、我々は明らかに強調表示された間隔で最初に1.4283の 2つの等しい高値であり、それらの後にのみ、2時間目の真ん中に1.4260の 安値であったことがわかります。したがって、最後の2時間の間にEURUSDは減少し、この減少の値は(1.4283 - 1.4260) / 0.0001 =23 pips であったと結論づけられます。


追伸:GetPriceDiffInPoint()関数をテストするためのスクリプトを添付します。

ファイル:
 

素晴らしい選択です。どのTFでも最初に成功したバーの終値で注文(買いまたは売り)を閉じる機能はないのでしょうか?

 

注文を受ける前に、どのようなチェックが行われるのか、聞いてもいいですか?

もし、別の機能で収集されているのであれば、リンクを教えてください。ない場合は、リストを渡すことができます。

 
SK. писал (а)>>
注文を受ける前に、どのようなチェックが行われるのか、聞いてもいいですか?

セルゲイ 私に対する質問なのか、そうでないのかわからないのですが。

 
KimIV писал (а)>>

...

エラー処理時の機能、オープン、クローズ、モディファイにはSleep コマンドを使用します。いろいろ調べて、これと交換することをお勧めします。要は、遅延の値は推奨値であり、厳密にその値である必要はないということです。多くの場合、注文を受けたらすぐに(遅滞なく)アクションを実行することができます。しかし、リクオートをした場合、BCがいつ、どのような操作を行うか計算できるのが嫌なのです。

int start()
  {
//----
   Sleep_RND(20000);  
//----
   return(0);
  }
//+------------------------------------------------------------------+
void Sleep_RND(int _Pausa)
  {
   MathSrand(TimeLocal());
   MathRand();
   Sleep(MathRound(_Pausa*MathRand()/32767+_Pausa/5));
   return;
  }
 
KimIV писал (а)>>

セルゲイ 私に対する質問かどうかわからないのですが......。

はい、イゴールさん、あなたへの質問です。

要はこういうことです。オープニング機能を見てみると、そこにはチェックがない。どうやら、何か別の機能に集中しているようです。もしそのような機能があれば、リンクを教えてください。もし、そのような機能がない場合は、ここにチェックリストを書いてもよいでしょう。ゆっくりやってもいい。

 

いや、セルゲイ、もうチェックはしないんだ。というか、そうなんですが、別々の機能には入れません。つまり、そのうちのいくつかを入れて・・・。げげっ、例を挙げよう。

extern int StopLoss=30;
extern int TakeProfit=50;

double ll=GetSizeLot();
double po, pp, sl, tp;
if (ExistPositions(NULL, OP_BUY, Magic)) {
  po=PriceOpenLastPos(NULL, OP_BUY, Magic);
  if (!ExistOrders   (NULL, OP_SELLSTOP, Magic+1)
  &&  !ExistPositions(NULL, OP_SELL    , Magic+1)) {
    pp=po-offSet*Point;
    if (StopLoss>0) sl=pp+StopLoss*Point; else sl=0;
    if (TakeProfit>0) tp=pp-TakeProfit*Point; else tp=0;
    SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);
  }
}

ここで何を見るか?

1.取引するロットを計算します。

2.指定されたマジックナンバーの買い ポジションがある場合、そのオープンプライスはpoと 定義されます。

SellStop 注文がなく、Magikが1単位大きい売り ポジションがある場合、買いポジションの 値よりoffSet ポイントだけ低い価格でSellStop 注文を設定します。

4.その間に、物価水準slと tpを 計算する。

 
KimIV писал (а)>>

4.その間に、価格水準slと tpを 計算する。

そういうことなんです。既存の制約を考慮しなければなりませんが、一般的に言って、制約は常に変化しています。

可能な限りの制約を解析するような機能はありますか?

モディファイも同様です。

--

(私は、各 good order (OP,SL,TP) に対して3つ、各 market order (SL,TP) に対して2つの合計16の関数を持っています。

と、さらにパーミッションの組み合わせを分析する)。

 
SK. писал (а)>>
各種制約を解析する機能はありますか?
まだだ...なぜか、その必要はなかった。でも、おかげさまで、考えてみたら、そうすべきなんだ!という気持ちになりました。>> ありがとうございました
 

GetTypePrice()機能

価格タイプの名称を返す。この関数は、オプションのパラメータを1つだけ受け付けます。有効な値:PRICE_CLOSE、PRICE_OPEN、PRICE_HIGH、PRICE_LOW、PRICE_MEDIAN、PRICE_TYPICAL、PRICE_WEIGHTED。初期値は 0 - PRICE_CLOSE です。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование типа цены.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    Applied_Price - тип цены                                                |
//+----------------------------------------------------------------------------+
string GetTypePrice(int Applied_Price=0) {
  switch (Applied_Price) {
    case PRICE_CLOSE   : return("Close");
    case PRICE_OPEN    : return("Open");
    case PRICE_HIGH    : return("High");
    case PRICE_LOW     : return("Low");
    case PRICE_MEDIAN  : return("Median");
    case PRICE_TYPICAL : return("Typical");
    case PRICE_WEIGHTED: return("Weighted");
    default            : return("Unknown Type Price");
  }
}
この機能は、インジケータ、スクリプト、Expert Advisorの動作のコメントやログ、特に価格定数の 値の説明を表示するために便利です。