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

 
イゴールへ、もし誰かを不快にさせたなら謝る...。別に批判しているわけではなく、そう見えてしまうのが残念なんです。とにかく、掲載したプロトタイプは何度も修正・改良を加えることになります。だからパズルはない(作者になりすましたことはない)今後、作者の修正のために作品を送ります。これまでの25ページが最初のステップだと自分では思っています。完成し次第、サイトに記載されている住所に送ります。あなたの貴重な仕事と、無私の経験の共有に感謝します!!!
 
rid писал (а)>>

可能だと思います。どうやら、各レベル(クロス)で、現在のオープンポジションのロットサイズが何であるかを確認する必要があるようです。そして、まさにこの基準で、クロージングメカニズムを導入すべきなのです !

このような機能(ロットサイズを返す機能)は、このブランチに用意されています。pp.を見てください。17 и 27

ありがとうございました。これで前に進むことができます。 ありがとうございました。

 

OpenPosition() 関数で追加のロットサイズチェックが必要かどうかを判断するには、 ロットサイズをどのように計算し、どこでどのように呼び出すかを確認する必要があります。私は、この関数をブランチ

double ll=GetSizeLot();

もしかしたら、 を見逃していたかもしれません。

https://championship.mql5.com/2012/ru/news このように計算されると、134エラーが出て、優勝を逃すかもしれません :-)

 

こんにちは、KimIV.sent one thing will have to write it back.私はプログラミングが苦手で、トレーダーになるために3週間勉強しています。私の文法もよくありません。

をご覧ください。私が質問したいのは、これです。 CCiインジケータを使ってEAを作ることは可能ですか?

レベル CCi 250, 50, -50, -250.それぞれ-50、50になったら(クロスしたら)、売ったり買ったりするという考え方です。取引を停止するタイミングを検討する。

1その後、(売りが出たとすると)グラフは-250を横切り、次に反対方向の-250を横切る(写真で見ることができます)。

2 250に届かず、50にクロスして戻ってきたチャート。

買う場合も同じですが、その逆もあります。

ユーロ/ドル、任意の時間枠を引用。

こんなぬいぐるみみたいなEA、いくらするんだろう?

同じ価格なら、もっといいものを提供できないか?

ありがとうございました。そうであってほしい。さて、私はFOREXの講座に行きました。

ところで、FXは本当に糧を得るための手段なのでしょうか?

 

皆様にご挨拶申し上げます。

このインジケータを見つけ、少し変更したところ、良いトレンドラインが引けるようになりました。

機能を練り上げるのも面白いかも...。(KimIVのリクエストみたいなものです)。

ファイル:
tlbs.mq4  8 kb
 
Prival писал(а)>>

Re.

OpenPosition("GBPJPY", OP_SELL, 0.1, pb+23*po, pb-44*po)。

OpenPosition("GBPJPY",OP_SELL, 0.1, 23, 44)を呼び出す方がいいかもしれませんね。

この提案により、ストップの使い勝手がよくなり、ピップ単位で設定できるようになりました。ストップ&テイクが価格水準で設定されているケースはどうでしょうか?例えば、直前のバーの安値や高値でストップする。あるいは何らかの線によって。関数を呼び出す前にポイントに変換され、関数内で価格に変換されるのでしょうか?これは冗長動作です。だから、このままにしておきます。

GetSizeLot() 関数については、後ほど検討します(ちなみに現在はGetLots() と呼ばれています)。まず、b-ForTest.mqhと b-Positions.mqh ライブラリの使用を終了する必要があります。

 

テスター用のCountOrders()関数です。

私のテスト版Expert Advisorsでは、CountOrders() 関数が、ExistOrders(),ExistPositions(),NumberOfOrders(),NumberOfPositions() 関数を置き換えています。つまり、あらゆる種類のポジションや注文の存在や、それぞれの種類の取引数に関する情報を提供することができます。このような取引所には独自の利点があり、それは1ティックの注文ベースを1回参照するだけで、必要な情報を一度に取得できることに表れています。そして、上記の機能は、特に併用する場合、それぞれが独立して1つの同じオーダーベースで動作するため、同じ呼び出しを繰り返してしまいます。その結果、CountOrders() 関数は、1回のパスの時間を数秒短縮することができ、最適化の時間を短縮することができる。

関数CountOrders() は、以下のパラメータをとる。

  • mo- 注文の種類別の件数の配列。関数が実行された後、配列は6つの要素を持ちます。0 要素-買い タイプの取引数、1 要素-売り 注文の数、2 要素-BuyLimit3 要素-SellLimit4 要素-BuyStop5 要素-SellStop です。
  • mn- ポジションまたは注文の識別子(MagicNumber)。デフォルト値は-1- 任意のMagicNumberです。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.08.2008                                                     |
//|  Описание : Рассчитывает количество ордеров по типам.                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mo - массив количества ордеров по типам                                 |
//|    mn - MagicNumber                          (-1 - любой магик)            |
//+----------------------------------------------------------------------------+
void CountOrders(int& mo[], int mn=-1) {
  int i, k=OrdersTotal();

  if (ArraySize( mo)!=6) ArrayResize( mo, 6);
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) {
      if ( mn<0 || OrderMagicNumber()== mn) mo[OrderType()]++;
    }
  }
}

P.S. CountOrders() 関数をオンラインでテストするためのスクリプトを添付します。

ファイル:
 

イゴールさん、そして皆さんもこんにちは。GetFractalBar(NULL,0, 0)関数を使用していて問題があります。- フラクタルバー番号をその番号で返します。正確には、機能に問題があるわけではありません。でも、その近くのどこか。

この設定でコメントを表示させればすべてOKです。チャートの隅にあるバーの番号をHAVEしています。

int a;
... ...

int start()
  {
//----
if(Time[0] == prevtime)   return(0);//ждём нового бара
   prevtime = Time[0];//если появился новый бар , включаемся

if ( isFractalUp() > isFractalDn() )  {//если это Down-фрактал

   a = iLow(NULL,0, GetFractalBar(NULL,0, 0));
   
Comment( GetFractalBar(NULL,0, 0));            }

また、グラフの隅にコメント番号を表示しても、すべてOKです。フラクタルのあるバーの最小値が左隅に表示されています。

if ( isFractalUp() > isFractalDn() ) {//если это Down-фрактал
   a = iLow(NULL,0, GetFractalBar(NULL,0, 0));

Comment(iLow(NULL,0, GetFractalBar(NULL,0, 0)));          }

しかし、さらに一般的には、それは明確ではありません関数そのものではなく、コメントに変数 "a" を挿入した途端、コメントには価格値ではなく、コーナーに1が返されるようになりましたここで :

if ( isFractalUp() < isFractalDn() ) {
   a = iLow(NULL,0, GetFractalBar(NULL,0, 0));
   Comment( a);                        }
3時間座りっぱなしで、何が悪いのかわからない!?できれば教えてほしいのですが...。
 
Rita писал(а)>>
関数そのものではなく、コメントに変数 "a" を挿入するとすぐに、コメントは価格値ではなく、隅に1を返します!

変数 "a "を整数型変数として宣言している、つまり

int a;

実数変数として宣言する必要があります。

ダブルエー

 

テスターのModifyOrder()関数。

これは、7ページで 公開したModifyOrder() 関数の簡易版で、あらかじめ選択した1つの注文やポジションの絶対価格水準を変更するためのものです。

ModifyOrder() 関数は、以下のパラメータを受け付けます。

  • pp- オーダー設定価格。0以下の値を渡すと、この価格水準の修正は行われない。初期値は-1 である。
  • sl- ストッププライス・レベル。0より小さい値を渡すと、価格水準の修正は行われない。初期値は0 である。
  • tp- 価格水準を取る。0より小さい値を渡すと、価格水準の修正は実施されない。初期値は0 である。
  • ex- 保留注文の有効期限。初期値は0 である。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.03.2008                                                     |
//|  Описание : Модификация ордера. Версия функции для тестов на истории.      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена открытия позиции, установки ордера                            |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    ex - дата истечения                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er;
  double op=NormalizeDouble(OrderOpenPrice() , dg);
  double os=NormalizeDouble(OrderStopLoss()  , dg);
  double ot=NormalizeDouble(OrderTakeProfit(), dg);
  color  cl;

  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);

  if ( pp!= op || sl!= os || tp!= ot) {
    if (MathMod(OrderType(), 2)==0) cl= clModifyBuy; else cl= clModifySell;
    if (!OrderModify(OrderTicket(), pp, sl, tp, ex, cl)) {
      er=GetLastError();
      Print("Error(", er,") modifying order: ", ErrorDescription( er));
      Print("Ask=",Ask," Bid=",Bid," sy=",OrderSymbol(),
            " op="+ GetNameOP(OrderType())," pp=", pp," sl=", sl," tp=", tp);
    }
  }
}