extern double SL=20; // SL для открываемого ордера extern double TP=20; // ТР для открываемого ордера extern double Lot=0.01; // Жестко заданное колич. лотов datetime time; //--------------------------------------------------------------- 2 -- int start() { int Total;
double M_0, M_1;
bool Ans =false, // Ответ сервера после закрытия Cls_B=false, // Критерий для закрытия Buy Cls_S=false, // Критерий для закрытия Sell Opn_B=false, // Критерий для открытия Buy Opn_S=false; // Критерий для открытия Sell
extern double TP=20; // ТР для открываемого ордера
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;
double
M_0,
M_1;
bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell
//--------------------------------------------------------------- 3 --
// Учёт ордеров
for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;
if(Total!=0 || time==Time[1])return;
// Торговые критерии
M_0=iOsMA(NULL,0,13,34,8,0,0); // 0 бар
M_1=iOsMA(NULL,0,13,34,8,0,1); // 1 бар
if (M_1<0 && M_0>0)
Opn_B=true;
if (M_1>0 && M_0<0)
Opn_S=true;
//--------------------------------------------------------------- 7 --
if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,Bid-SL*Point,Bid+TP*Point);time=Time[1];}
if (Opn_S)
{OrderSend(Symbol(),OP_SELL,Lot,Bid,0,Ask+SL*Point,Ask-TP*Point);time=Time[1];}
}
すべてのダニでテストしているのでしょうか?
返信ありがとうございました。初歩的なEAをスケッチした。それでもダメなんです。
このコードでは、エラーを探すには、OrderSend関数の F1キーを押すと、標準のエディタでヘルプを表示され、受信パラメータの順序を見て、エラーが発生します。
+ プリント/アラートで変数の値を確認し、コードセクションの ( 代入/実行 ) の後に挿入します。
そして、DoubletoSt..NormalizeDouble..TimeToStrと、出力を正規化することを忘れないようにしましょう。
kimIVによるコード付きフリーライブラリ2点を添付します。
コードはシンプルで、既製の関数もあり、初心者にはとても良い。
// ロット数はほとんど決まっていない :)
はい
そうすると、ゼロバーのチャタリングが発生するんですね。
全てのダニでテスト?
DCへの不愉快な流れを「止める」方法とは?
以下は、そのログの抜粋です。
10:00:25 旧ティック EURUSD30 1.38730/1.38740
10:00:25 旧ティック EURUSD240 1.38730/1.38740
10:00:25 旧ティック EURUSD1440 1.38730/1.38740
10:00:25 旧ティック EURUSD15 1.38730/1.38740
10:00:25 旧ティック EURUSD1 1.38730/1.38740
10:00:25 旧ティック EURUSD60 1.38730/1.38740
10:00:25 旧ティック EURUSD5 1.38730/1.38740
11:00:34 旧ティック EURUSD30 1.38847/1.38863
11:00:34 旧ティック EURUSD240 1.38847/1.38863
11:00:34 旧ティック EURUSD1440 1.38847/1.38863
11:00:34 旧ティック EURUSD15 1.38847/1.38863
11:00:34 旧ティック EURUSD1 1.38847/1.38863
11:00:34 旧ティック EURUSD60 1.38847/1.38863
11:00:34 旧ティック EURUSD5 1.38847/1.38863
11:25:06 旧ティック EURUSD30 1.38707/1.38722
11:25:06 旧ティック EURUSD240 1.38707/1.38722
11:25:06 旧ティック EURUSD1440 1.38707/1.38722
11:25:06 旧ティック EURUSD15 1.38707/1.38722
11:25:06 旧ティック EURUSD1 1.38707/1.38722
11:25:06 旧ティック EURUSD60 1.38707/1.38722
そうすると、ゼロバーのチャタリングが発生するんですね。
テストは頭が痛くなる?
//売買の基準
M_0 ={ iOsMA(0,0,13,34,8,0,1) }; //| 1bar
M_1 ={ iOsMA(0,0,13,34,8,0,2) }; //| 2bar
Opn_B ={ (((M_1<0)==1) &&((M_0>0)==1) ) };
Opn_S ={ (((M_1>0)==1) &&((M_0<0)==1)) ) };
を試してみてください。)