// 注文関数 //グローバル変数 // Mas_Ord_New[31][9] // 最後に判明した注文の配列 // Mas_Ord_Old[31][9] // 前(古)の注文の配列 // 第1インデックス = 注文番号 // [][0] は定義なし // [][1] 開注文価格(abs.of an order (abc rate) // [][2] StopLoss of an order (abc rate) // [][3] TakeProfit of an order (abc rate) // [][4] Order number // [][5] number of lot of an order.(Abcレート) // [][6] 注文種別0=B,1=S,2=BL,3=SL,4=BS,5=SS // [][7] 発注のマジックナンバー // [][8] 0/1
if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])とする。 Inform(1, Mas_Ord_Old[old][4]); // つまり買い注文はカウンターシグナルで決済された else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2]) Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2])// SLがトリガーしたことを意味する else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3]) Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]。// TAトリガー
else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3]) Inform(2, Mas_Ord_Old[old][4]); // つまり売り注文はカウンターシグナルで決済される else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2]) Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]);。// SLがトリガーしたことを意味する else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3]) Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // TAトリガーした
今のところ、こんな感じです。
//+------------------------------------------------------------------+
| フィボ・トレーディング.mq4 | フィボ・トレーディング.mq4
//| ミノディ|
//| minodi@yandex.ru |
//+------------------------------------------------------------------+
#property copyright"Minodi(ミノディ)"
#プロパティリンク "minodi@yandex.ru"
extern int period_EMA = 233,
period_SMA = 233,
ストップロス=30
extern double Lot = 0.01;
extern string SesEnd ="22:00"; //Hai or Lowの境界時間
//+------------------------------------------------------------------+
//| スクリプトプログラム起動機能
//+------------------------------------------------------------------+
int start()
{
//------- 日足、Fibs、Hi-Lowのレンダリング時間----------------+。
int shift = iBarShift(NULL,1440,Time[0]) + 1;
double HiPrice = iHigh(NULL,1440,shift); //高値の場合
double LoPrice = iLow(NULL,1440,shift); // 安価な価格
double OpPrice = iOpen (NULL,1440,shift); //オープン価格
double ClPrice = iClose (NULL,1440,shift); // 終値。
datetime StTime = iTime(NULL,1440,shift); // ?
if(TimeDayOfWeek(StTime)==0/*Sunday*/)
{金曜日の高値・安値の追加
HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));
LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));
OpPrice = iOpen(NULL,1440,shift+1);
ClPrice = iClose (NULL,1440,shift+1)です。
}
double Pivot =(HiPrice+LoPrice+ClPrice)/3;
Double Range =HiPrice-LoPrice;
double Fibo138 =1.382*Range+LoPrice;
double Fibo162 =1.618*Range+LoPrice;
double Fibo_138 =LoPrice-(1.382*Range-Range);
double Fibo_162 =LoPrice-(1.618*Range-Range);
//---------------- HiTimeとLow-----------------------------------------------------+。
int HiTime,LoTime;
int time; // 次のバーで値をロールバックする。
if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}.
if (High[0]>HiPrice)HiTime=TimeCurrent()。
if (Low[0]<LoPrice)LoTime=TimeCurrent();
Comment("このバーでは、"+"ⅳ時間高値="+HiTime+"ⅳ時間低値="+LoTime");
//-----------------Ценовой диапазон Демарка-------------------------------+
int currDay, i=0; //
if (currDay!=TimeDay(Time[i]))
{
if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;
if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;
if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;
i++;
}
double MaxDay = x - LoPrice; // デマークの価格帯
double MinDay = x - HiPrice; // デマークの価格範囲
// -----------Скользящие средние---------------------------------------------+
double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0)。
double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);
double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
//----------------Удаление вчерашних ордеров---------------------------------+
//------------------Ордера----------------------------------------------------+
フォーラムメンバーの皆様、コードをチェックしてください、私は徐々に追加する予定です。
これらは私が与えたパラメータです、始める前に配置してください
int HiTime,LoTime;
int time; // на следующем баре обнкляем значения
Вот эти параметры ято я давал, поместите перд стартом
int HiTime,LoTime;
int time; // на следующем баре обнкляем значения
フォーラムメンバーの皆さん、注意して、どんな間違いがあったのか教えてください。
//+------------------------------------------------------------------+
| フィボ・トレーディング.mq4 | フィボ・トレーディング.mq4
//| ミノディ|
//| minodi@yandex.ru |
//+------------------------------------------------------------------+
#property copyright"Minodi(ミノディ)"
#プロパティリンク "minodi@yandex.ru"
extern int period_EMA = 233,
period_SMA = 233,
ストップロス=30
マジック=55。
extern double Lot = 0.01;
extern string SesEnd ="22:00"; //Hai or Lowの境界時間
int HiTime,LoTime;
int time; // 次のバーで値をロールアップする。
//+------------------------------------------------------------------+
//| スクリプトプログラム起動機能
//+------------------------------------------------------------------+
int start()
{
//------- 日足、Fibs、High-Lowのレンダリング時間----------------+。
int shift = iBarShift(NULL,1440,Time[0]) + 1;
double HiPrice = iHigh(NULL,1440,shift); // ハイプライス
double LoPrice = iLow(NULL,1440,shift); // 安価な価格
double OpPrice = iOpen (NULL,1440,shift); //オープン価格
double ClPrice = iClose (NULL,1440,shift); // 終値。
datetime StTime = iTime(NULL,1440,shift); // ?
if(TimeDayOfWeek(StTime)==0/*Sunday*/)
{金曜日の高値・安値の追加
HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));
LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));
OpPrice = iOpen(NULL,1440,shift+1);
ClPrice = iClose (NULL,1440,shift+1)です。
}
double Pivot =(HiPrice+LoPrice+ClPrice)/3;
Double Range =HiPrice-LoPrice;
double Fibo138 =1.382*Range;
double Fibo162 =1.618*Range;
double Fibo_138 =(LoPrice-1.382*Range)-Range;
double Fibo_162 =(LoPrice-1.618*Range)-Range;
//---------------- time hai and low-----------------------------------------+.
if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}.
if (High[0]>HiPrice)HiTime=TimeCurrent()。
if (Low[0]<LoPrice)LoTime=TimeCurrent();
Comment("このバーでは、"+"ⅳ時間高値="+HiTime+"ⅳ時間低値="+LoTime");
//-----------------Ценовой диапазон Демарка-------------------------------+
int currDay, i=0; //
if (currDay!=TimeDay(Time[i]))
{
if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;
if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;
if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;
i++;
}
double MaxDay = x - LoPrice; // デマークの価格帯
double MinDay = x - HiPrice; // デマークの価格範囲
// -----------Скользящие средние---------------------------------------------+
double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0)。
double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);
double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
//------------------Ордера----------------------------------------------------+
if (HiTime>LoTime){。
int ticket1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red);
int ticket2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,マジック、58000、赤)。
int ticket3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red);
int ticket4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red);
int ticket5 =OrderSend(Symbol(),OP_SELLLIMIT,ロット、Fibo162、0、0、HiPrice、NULL、マジック、58000、赤)。
int ticket6 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);
}
if (HiTime<LoTime){。
int ticket7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,赤)。
int ticket8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,マジック,58000,赤)。
int ticket9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,マジック,58000,赤)となります。
int ticket10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red);
int ticket11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,マジック,58000,赤)。
int ticket12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red);
}
if (HiTime>LoTime && ClPrice>Pivot) {。
int ticket13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red);
int ticket14=OrderSend(Symbol(),OP_BUYLIMIT,ロット、ピボット、0、0、Fibo138、NULL、マジック、58000、赤);
}
if (HiTime<LoTime && ClPrice<Pivot)
int ticket15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPrice,NULL,Magic,58000,Red);
int ticket16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red);
}
return(0)です。
//+------------------------------------------------------------------+
一見するとパラメータ
int currDay;
先ずは
フォーラムの皆さん、理解に役立ててください...。
以下はコードの一部です(主なコードはExpert Advisorの構築マニュアルから引用しています)。
// 注文関数
//グローバル変数
// Mas_Ord_New[31][9] // 最後に判明した注文の配列
// Mas_Ord_Old[31][9] // 前(古)の注文の配列
// 第1インデックス = 注文番号
// [][0] は定義なし
// [][1] 開注文価格(abs.of an order (abc rate)
// [][2] StopLoss of an order (abc rate)
// [][3] TakeProfit of an order (abc rate)
// [][4] Order number
// [][5] number of lot of an order.(Abcレート)
// [][6] 注文種別0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] 発注のマジックナンバー
// [][8] 0/1
if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])とする。
Inform(1, Mas_Ord_Old[old][4]); // つまり買い注文はカウンターシグナルで決済された
else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2])// SLがトリガーしたことを意味する
else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]。// TAトリガー
else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3])
Inform(2, Mas_Ord_Old[old][4]); // つまり売り注文はカウンターシグナルで決済される
else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]);。// SLがトリガーしたことを意味する
else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // TAトリガーした
あとは興味なし...。
問題:90%のケースで正しいパラメータが表示されます。例えば、SLがトリガーされた場合、パラメータは「19」、TPが「20」、注文が手動またはカウンター信号で閉じられた場合、パラメータは「1」または「2」です。そのように設計されているのです。
しかし、時には(かなり頻繁に)「20」の代わりに「19」(またはその逆)、あるいは「1」(「2」)が返されることがあります。注文の終了理由の条件として、"if "関数を正しく説明するのを助けてください。
理由は価格の四捨五入にあるのではないでしょうか?