[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 22

 
skyjet:

こんにちは!私の目標は、関数を作成することによって、EAにインジケータを転送することです。

最初のステップである、関数の作成が行われます。しかし、次の「テスト」はうまくいきません。

インジケーターはチャンネルを描画します。4つのバッファと多くの変数を備えています。全て機能に置きました。

しかし、テスト用のExpert Advisorを作成し、インジケータと私の関数を比較して動作の正確さを確認する場合、コンパイルが実現できません。

関数を作成したときにはなかった外部変数のエラーがEAで常に出ている。

何かアドバイスや例のリンクを教えてください。GODZILLAさんの記事を参考にさせていただきましたが、私とは事例が違いますね。

その方式は、おおよそ次のようなものである。

  • インジケータinit()にあったものを全て別の関数、例えばfInit_Indicator()に移し、それをEAのinit()に記述し、インジケータバッファの初期化に関する ものをコードから削除することを忘れないでください。
  • 全てのグローバルインジケータ変数をコピーし、EAのグローバル変数に配置します。EAでインジケータを宣言する際には、インジケータバッファのサイズを定義することを忘れないでください。gd_Buf1[100]、gd_Buf2[100]などのようなもの。100の価値観で十分だと思います。
  • インジケーターのstart()関数をfMyIndicator()などに改名し、EAのstart()関数の中で注文開始のコードの前(判定用)に配置します。
  • また、インジケーターバッファと「ノンインジケーター」バッファは別物であることを忘れないでください。これには、いくつかの解決策があります。
  • 新しいバーが到着すると、「非インディケーター」配列のすべてのデータがシフトされ、新しい計算値が配置される0インデックスが解放されます。
  • 再び、新しいバーが来たら、「非指標配列」全体を再計算します。

難しいことではありませんので、ぜひお試しください。

 
999666:
n個の注文を出したら、EAがロットを2倍にする条件を書きたい のですが。
if (MyOrders >= n) Lots *= 2;
 

こんにちは。

私はまだ配列について理解していないんだ。

新しいティックごとにポイント数の値を配列にロードする必要があります。

配列の大き さは毎回異なります。この場合、ループの各反復でArreyResizeを使用すればいいのでしょうか?

 

こんにちは、アレイを題材にしたものです。

このようなセルがあります

12345,p,fgh,2011-01-01,55,66

どうすれば55を手に入れられるのか?

ありがとうございます。

 

配列が異種混在している場合は,すべての要素を文字列型に変換し,必要な要素を

StringFinde(https://www.mql5.com/ru/forum/138609/page22#613148).間違っていたら訂正してください。

 
TarasBY:

参考にならない場合:2つの条件を持つことが難しくない場合 if (LotConst_or_not) gd_200 = Lot;

else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

残高ではなく、未決済注文の数を計算するExpert Advisorに置き換えます。

回答は非常にありがたい。

 
TarasBY: 参考にならない場合:2つの条件を持つことが難しくない場合 if (LotConst_or_not) gd_200 = Lot;

else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

残高ではなく、未決済注文の数を計算するExpert Advisorに置き換えます。

回答は非常にありがたい。


 
Snegovik:

こんにちは、アレイを題材にしたものです。

このようなセルがあります

12345,p,fgh,2011-01-01,55,66

どうすれば55を手に入れられるのか?

ありがとうございます。


https://book.mql4.com/ru/variables/arrays
 
999666:
n個の注文を出した後、EAがロットを2倍にする条件を書く のを手伝ってください。
2×ロットで既に3つ開いている状態で、次の(4つなどの)注文を開きたい場合。
int Opened_pos=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  { if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    { Opened_pos++;
} } }
if (Opened_pos>=4) double lot=lot*2;
 
Fox_RM:

こんにちは。

私はまだ配列について理解していないんだ。

新しいティックごとにポイント数の値を配列にロードする必要があります。

配列の大きさは毎回異なります。この場合、ループの各反復でArreyResizeを使用すればいいのでしょうか?

1-項目:配列のサイズを 変えるというあなたの哲学は最初から欠陥があります。100のうち99のケースで、インジケーターの読み取りを処理するために10個のセルしか使用することができません。

2つ目:これらの測定値を刻々と再計算するのは、情報に疎い脳の気まぐれである。