アドバイザーの書き方を勉強中...。 - ページ 3

 
まだOrderSend エラー130が1つあります...。何に依存するのか?
 
paukas >> :

分足ローソク足(Alpariなど)をダウンロードし、分足ローソク足でテストをしてみる。

H4のMTSがあるのに、どうやってミニッツのテストをすればいいんだ......?

4時間足のローソク足で、5pipsのストップでテストすることはできません。

なぜダメなのか?
 

自動売買選手権2007:エキスパートにありがちなエラー」の記事で
OrderSendのエラー130(ERR_INVALID_STOPS)は、ストップが間違っているか、近すぎるストップだと読んだことがあります。

DCに電話して、停車できる最短距離を聞いたところ、そんな制限はないとのことでした......。不思議だ!

また、ひとつだけわからないことがあります。手動で注文を出すと、実際にはストップやプロフィットを設定できないのですが、OrderSend()ではどのように行っているのでしょうか?

手動で注文を出してからストップをかけるか確認したところ...建値から最低4pips、つまり現在値から設定する必要がある...とのことでした。

あとはOrderModify()をいじくり回すだけです。なぜOrderSend()にストップロスが必要なのでしょうか?

 
ALex2008 >> :

H4のMTSがあるのに、どうやってミニッツのテストをすればいいんだ......?

なぜダメなのか?

最小のTFに対するテストは次のように行われる。

このように呼び出しを記述します(例)。

   wpr[1] =   iWPR ( Symbol(), 10, PERIOD_H4, 1 );
   wpr[2] =   iWPR ( Symbol(), 20, PERIOD_H4, 1 );
   wpr[3] =   iWPR ( Symbol(), 40, PERIOD_H4, 1 );
   wpr[4] =   iWPR ( Symbol(), 60, PERIOD_H4, 1 );


分でやれば一番効率よく正しいテストができる!

が一番正しいでしょう!

---

残念ながらティックではできません!MT4テスターにはティック履歴がないからです


---

TFをすぐに書けるようになりましょう!そうすれば、EAがどのTFで実行されたかなんて気にならなくなりますよ。

定数の代わりにパラメータを記述することは合理的です - よりシンプルなコードと明確な認識のために私は定数を置きます

 

ゆり)プロじゃないから...)wpr[1] = iWPR( Symbol(),10, PERIOD_H4, 1 );

 
ALex2008 >> :

ユリ)私はこの仕事のプロではないので...)wpr[1] = iWPR ( Symbol(), 10, PERIOD_H4, 1 );

iWPRは内蔵のインジケーター

double iWPR( string symbol, int timeframe, int period, int shift)
Larry Williams の Percent Range インジケータの計算。
パラメータ:
シンボル - このインジケータが計算されるデータ上の計器のシンボル名。NULLはカレントシンボルを意味する。
timeframe - Period.チャート期間のいずれかとすることができる。0は現在のチャートの期間を意味します。
period - インディケータを計算する期間(バーの数)。
shift - インジケータ・バッファから受け取った値のインデックス(現在のバーから指定した期間だけ後ろに相対的にシフトします)。


例:
if(iWPR(NULL,0,14,0)>iWPR(NULL,0,14,1)) return(0);

FAQに記載されているので、見てみてください。

wpr[...]は、異なる期間の各指標の結果をまとめた配列です。

( 配列に好きな名前を付けることができます。)

double wpr[5] ;

wpr[1] = iWPR ( Symbol(), 10, PERIOD_H4, 1 );
wpr[2] = iWPR ( Symbol(), 20, PERIOD_H4, 1 );
wpr[3] = iWPR ( Symbol(), 40, PERIOD_H4, 1 );
wpr[4] = iWPR ( Symbol(), 60,PERIOD_H4, 1 );


期間違いの通話を見せただけなのに...。

指標にピリオドを打つことで、どのTFでもテストできるようにしたことです

 
インジケータに期間を一気に書く!ということであれば、どのTFでもテストできるのですが、なるほど・・・ -Expert Advisorにはインジケータがなく、H4キャンドルしかない(インジケータとして) -TF これからコードであらゆるところを考えてみて、どのTFでもテストできるようにします)
 

オープンオーダーの改造をすることにした...。

OrderSendの 直後

      if (OrderSelect(0,SELECT_BY_POS)==true)
        if (OrderType()==OP_BUY)
          OrderModify(OrderTicket(),OrderOpenPrice(), Stop, Take, colorBaySell);


ログにエラーがあります。

OrderModify関数の無効なチケット
11:43:54 2005.01.26 13:12 EURUSD: OrderModify error 4051
何が問題なのか、アドバイスをお願いします。

 

新しい停止値は、以下のように設定する必要があります。:

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,.....
                                                    
新しいストップを設定する場所 - pips (整数) で指定します。
 

OrderClose で使用したMarketInfo() は OrderModify でも必要ですか?