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

 
Fox_RM:

そこでNewBar() 関数を使って新しいバーで注文を出そうとしました。このような目的で使用する場合?

例えば if(NewBar())i++; のようなもの。

NewBarは気がつきませんでした、すみません。

次に、以下を変更します。新しいバーのみで取引を開始する場合は、毎ティックごとにインジケータ全体を計算する必要はありません。

そこで、取引開始の条件を確認する前にインジケータの計算を 全て移動させ、必要なだけのバー数をカウントします(間違いがなければ20本)。


そこで、戦略は次のようになります。

1) 新しいバー? いいえ - 徒歩

2) はい - 必要なものすべて(MA、インジケータ、その他条件に対するものすべて)を計算します。

3)コンディションの確認 - いいえ - 歩く

4) はい - 現在の価格(アスクまたはビッド)でオープンします。

 
ilunga:

NewBarは気がつかなかった、申し訳ない。

次に、以下を変更します。新しいバーで取引を開始するだけであれば、ティックごとにインジケータ全体をカウントする必要はありません。

そこで、取引開始の条件を確認する前にインジケータ全体の計算を移動させ、バーの本数ではなく、必要な本数(私の記憶に間違いがなければ20本)をカウントします。

そうです、20です。やり方は大体わかっています。Expert Advisor の 20 本のバーの計算と私の計算の違いについて教えてください。

エラーの本質を理解したいのです。

 
Fox_RM:
皆さん、ごきげんよう。
Expert Advisor用のインジケーターのコードを書き換えて、トラッキングすることにしました。
私のインジケーターのコードを変更し、そのシグナルの動作を追跡することにしました。
コンパイル時のエラーもなく、Strategy Testerでもエラーなく動作しています。

使い方がわからない。

Z.U. 愚かなミスがたくさんあると思いますので、空砲を撃ってください。

例えばここで「何を踊っているのか」を整理するよりも、見たままコードを書き換える方が簡単です。

  ArrayResize(MA1,Bars);ArrayResize(MA2,Bars);

EAのインジケータに使われている関数がどうなるかは遭遇していない。

  int counted_bars=IndicatorCounted();  

しかし、「何でもいい」なら、自分が整理したループを。

   for(i=0; i<=limit; i++) 

limit = Bars - counted_bars で、2回目のティックで0に等しい値を取り、その後コードによって値が割り当てられます...OPA - そして、これはプログラミングにおけるNEW WORLDです。

  if(limit>0) limit=0;

...この条件をこのように書いてみて、もしストラテジー全体が壊れなければ

  if(limit<=0) limit=1;
 
Fox_RM:

つまり、バーの再計算にこの条件を使用するのですか?

しかし、私のインジケータでは、毎ティックごとにTP_UPと TP_DNの アレイが計算されます。したがって、最初に計算する必要があります。


ここでもOP_BUY==Ask、OP_SELL==Bidの 値が表示されます。

そして、Close[i]がありますね。

 
Fox_RM:

そうです、20です。やり方は大体わかっています。Expert Advisor ONLYの20バーの計算と私の計算の違いについて教えてください。

エラーの本質を理解したいのです。

指標全体の計算 には、そのような誤りはありません。何が速いか考えてみてください。

1) 1ティックごとにBars(約10000本)をカウントする場合

2) 20小節を1分間に1回(あるいはそれ以上)数えること。

 
Fox_RM:
皆さん、ごきげんよう。
Expert Advisor用のインジケーターのコードを書き換えて、トラッキングすることにしました。
私のインジケーターのコードを変更し、そのシグナルの動作を追跡することにしました。
コンパイル時のエラーもなく、Strategy Testerでもエラーなく動作しています。

使い方がわからない。

Z.I. 間違いやバカが多いと思うので、空砲を撃ってください。

NOT PRINCIPALですが、コードを簡略化するために、この構成にしました。

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

次元を持つ単純な配列宣言に置き換えるべきでした。

double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM:

そうです、20です。やり方は大体わかっています。Expert Advisor ONLYで20本という計算と、私の計算の違いを教えてください。

エラーの本質を理解したいのです。

これらはPRINCIPAL{FUNDAMENTAL}なプログラミングの原則で、意味のないことはしないようにしましょう!:)))
 
Fox_RM:
そしてもう一つ、図書館の運営に関する質問です。
ライブラリファイルを作成し、コンパイルして、すべてエラーなく進みました。
その関数をインジケータコードにインポートしてコンパイルすると、すべてもOKです。
インジケータを起動すると、インポートする関数が実行されない。

インジケータコード、すべて動作します。以下は、ライブラリのコードです。

これは、インジケータコード内の呼び出しです。

//+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link      "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn(double & ArrSr[])
{
double a=1,c,step=1/20;
for (int i=0;i<=20;i++)
{if (ArrSr[i]==0){a*=1;}else{a*=MathAbs(ArrSr[i]);}}
c=MathPow(a, step);
  return(c);
}
//+------------------------------------------------------------------+
 
Zhunko:

Vadimさん、こんなに小さく(&)を入れてしまって、直視できない!......!:)))

作者は(作者版では)この機能があるところでは実行され、別のところでは実行されなかったのはなぜだろう!?;)

 
Fox_RM:

そうです、20です。やり方は大体わかっています。Expert Advisor ONLYの20バーの計算と私の計算の違いについて教えてください。

エラーの本質を理解したいのです。

ところで、サイズ20のワーキングアレイを宣言していますね。

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

そして、あなたのライブラリは21の要素を計算します。

for (int i=0;i<=20;i++)

1からループを開始することが想定できます。

for (int i=1;i<=20;i++)