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

 
KimIV:
B_Dima です。
CCIの値が100を超えたら、-100以下になるまで買いポジションを建て、-100以下になったら、100を超えるまで売りポジションを建てます。

デミには、こんな機能を提案します。

int CCI_period=14;
int Applied_Price=PRICE_CLOSE;

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.24.2008                                                     |
//|  Описание : Возвращает торговый сигнал:                                    |
//|              1 - покупай                                                   |
//|              0 - сиди, кури бамбук                                         |
//|             -1 - продавай                                                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    nb - номер бара                 (    0       - текущий номер бара)      |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sy="", int tf=0, int nb=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double cci0=iCCI(sy, tf, CCI_period, Applied_Price, nb);
  double cci1=iCCI(sy, tf, CCI_period, Applied_Price, nb+1);
  int bs=0;

  if (cci1<=+100 && cci0>+100) bs=+1;
  if (cci1>=-100 && cci0<-100) bs=-1;

  return(bs);
}

この関数は、買い時には1を、売り時には-1を返します。売買条件は思いのままです。あとは、刻み目ごとに次のことをするだけです。

1.GetTradeSignal()の値を取得します。

2.受信値==0 ならば、何もしない。

受信値 >0 ならば、すべての販売を終了し、購入する。

4.計算値が<0であれば、すべての取引を終了し、売却します。

:))) もちろん感謝します、でも私のミスです、正確な説明が足りませんでした、間隔50のCCIインジケータは方向とトレンドの変化を示し、価格がEMA8にタッチするとオープニングが発生します、またストップロスやテイクプロフィットなどのインジケータを使って修正を決定しています。CCIが+100を突破したらEMAにタッチして買いポジションを建て、CCIがどこにあっても(+10でも-20でも)構わない、要は-100を超えたら売りポジションを建てるという図式です。100本のローソク足を越えてから10本以上のポジションを建てるまでの間に、CCI>=+100とCCI<=-100は100本のローソク足を通過することがあります。晴れてほしいです。何かヒントがあれば、ぜひ教えてください。

 
B_Dima писал (а):
私のミスです、説明が正確ではありませんでした。

まあ...あなたの間違いは、あなたが正すべきものです :-)

私は正しい方向を示した。ゴールに導く。では、どうぞ...。

 
KimIV:

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、もう一度確認してください - スクリプトが動作しません。

1)通常の証券会社では、未決済注文の数に制限がない(無限に開く)。

2) 成行で注文を出す証券会社の場合 - (Error131)。NorthFinanceなどでテストすることができます。

 

便利な機能がたくさん並んでいますね...。もしかしたら、ユーザーが定義した条件によって、保留中の注文やポジションをオープンしたりクローズしたり、テイクやストップロスを設定したり、注文やポジションを修正したりできる取引EAを書くためのテンプレートを 書きたいという要望があるかもしれません......。このようなテンプレートがあれば、条件のブロックだけが変わるEAを すぐに書く ことができる(もちろん、この部分はストラテジーによってユーザーが挿入する)...。


もし、Kimから便利な機能、つまり汎用性のある一定水準の使い方があるのなら、KimからトレーディングEAのテンプレートのコードをレイアウトしてみたらどうだろう...。

 
Set777 писал (а):
イゴール、もう一度確認してください - スクリプトが動作しません:
1)通常の証券会社では、オープンオーダーの数に制限はありません(無限に開く)
2)注文が市場によって開かれる証券会社で - (Error131)です。NorthFinanceなど、テストできます。

1.スクリプトには、オープンポジションの数のチェックはありません。スクリプトを実行する回数、開くポジションの数。

エラー 131 -数量、ロットサイズが正しく ありません。おそらく0.15なので、0.2に置き換えてください。

 
kharko писал (а):
たくさんの便利な機能がレイアウトされている...

まだ5分の1もできていませんが...。秋までここでみんなを退屈させることになる。だから、我慢して...。

kharko wrote:
多分、トレーディングアドバイザーを書くためのテンプレートを 書きたいという欲求があるのでしょう。
テンプレート...テンプレート...グッドアイディア!ありがとうございました。でも、その前に機能...
 

DistMarketAndPos()関数。

さあ、始まるぞさらに面白い機能が登場例えば、相場と最も近いポジションとの距離をpips単位で返します。チェックする位置をより正確に選択するために、外部パラメータで設定します。

  • sy- 楽器の名前です。このパラメータが設定されている場合、この機能は指定された計器の位置のみをチェックします。""またはNULLは、現在の測定器を意味します。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUY、OP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子(MagicNumber).デフォルト値 -1 - 任意のMagicNumber。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 

DistMarketAndPos()の使用例です。

なぜ、最寄りの位置から市場までの距離を判断する機能が必要なのでしょうか?基本的な選択肢は、少なくとも4つあると思います。

  1. 購入または売却した。市場は我々の方向に動いた。そして、ある程度時間が経過し、既存のポジションが利益を得たら、すぐに入金し、同じ方向に再度エントリーします。
  2. 買ったり売ったりします。マーケットは私たちの方向へ向かっていった。一定の距離を移動し、既存のポジションが一定の利益を得ると、すぐに「これだ!」と実感します。逆転は近い!フリップの時間です。現在のポジションを クローズし、反対方向にオープンします。
  3. 買ったり売ったりします。市場は私たちに敵対しているのです。しかし、なぜか正しいと確信し、一番近いエントリーポイントからある程度離れたところ、つまりある程度の損切りのところで、平均して同じ方向に開いてしまうのです。
  4. 買ったり売ったりします。市場は私たちに逆行している。そして、私たちは、市場への参入を誤ったことに気づきました。そのため、ある程度の損切りを固定し、反対方向に開くようにしています。

これらのオプションのうち、特定の実装が必要な場合は、ここに要望を書き込んでください。私は、上記の枠内ですべての要望を実現します。

DistMarketAndPos()関数で実験するためのテンプレートを添付します。

ファイル:
 
拝啓 キムアイビー Expert Advisore-TFL_v 2のidPriceLevel() 関数でエラーがあります。このEAはStrategy Testerのビジュアルモードでは動作するのですが、デモ口座ではコメントで売買レベルを知らせているにもかかわらず、なぜかポジションが開きません。何が問題なのか、教えてくれるかもしれませんね。
 
khorosh:
e-TFL_v2 Expert Advisorに含まれるbool idPriceLevel() 関数にエラーがあります:最後の条件でgdUpPrice=0が 2回繰り返されていますが、おそらく2番目のケースでgdDnPrice=0と 書くつもりだったのでしょう。

ありがとうございました。e-TFL_v 2の修正版をサイトにアップロードしました。


khorosh
このEAは、私のStrategy Testerではビジュアルモードで動作しますが、デモ口座ではコメントで売買レベルを報告するものの、なぜかポジションを開くことができません。何が問題なのか、教えてくれるかもしれません。

このExpert AdvisorをNorthFinanceのデモでテストしてみたところ、どうでしょう。昨日、モスクワの友人から電話があった。同じExpert Advisorで文句を言われた。ライン単位でポジションを開き、止めるまでどんどんポジションを開いていくそうです。そのため、テストの目的は2つありました。

1.ご質問について。一般的な機能の確認。

2.友人の質問について。1回線から1ポジションだけ開設しました。

それを確認するために、e-TFL_v2 Expert Advisorを5分足でEURUSD, GBPUSD, USDCHF, USDJPYに置いてみました。トレンドラインを使って、直近の20~30本のバーにチャンネルを描きました。その結果、Expert Advisorは本来の動作をするようになりました。ユーロは下のラインから買われ、円は上のラインから売られている。ポンドとシーフもすべて正解でした。だから、自分で確認したほうがいい。Expert Advisorが動作します。