MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1); // Текущее значение 1-й МА
MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 2); // Предыдущее значение 1-й МА
MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1); // Текущее значение 2-й МА
MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 2); // Предыдущее значение 2-й МА
ありがとうございます。でも、正確な解答が欲しいです。現在のバーはカウントされず、以前のバーだけがカウントされるように。
ありがとうございます。でも、正確な解答が欲しいです。そのため、現在のバーは考慮されず、過去のバーだけが考慮されます。
くそー、他人のコードを掘ってしまった、また一目散にこの作品を変えようとする。この場合、おそらくPRICE_CLOSEか0を指定する必要があります...
以下は、シフトを0から1に変更したコードです。役に立ちますか?
//============================================================================================
//
//
//
//
//
//============================================================================================
inttern MA1_Period=7; // 第1MA期間
extern intMA2_Period=13; // 第2MAの周期
extern int MA1_Method=1; // MA1計算方法(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int MA2_Method=1; // MA2計算方法(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int MA1_Price=0; // MA1価格の計算方法
extern int MA2_Price=0; // MA2価格計算方法
extern int MA1_Shift=1; // MA1タイムシフト
extern int MA2_Shift=1; // MA2タイムシフト
extern double Lot = 0.01; // 固定ロット
extern int slippage = 0; // 成行注文の価格乖離率
int New_Bar; // 0/1 新しいバーの形成
int Time_0; // 新しいバーの開始時刻
int PosClose; // 交差の方向
int total; // 未決済注文の数
double MA1_0; // 1番目のМА(ピンク)の現在値
double MA1_1; // 第1MAの前回値(ピンク)
double MA2_0; // 第2MAの現在値(青色)
double MA2_1; // 第2MAの前回値(青色)
int orderBuy; // 1 = 買い注文が存在する事実
int orderSell; // 1 = 売り注文が存在する事実
//============================================================================================
int init()
{
}
//============================================================================================
int start()
{
ダブルプライス
int total=OrdersTotal(); // 注文の総数
for(int i=total-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) // 注文を選択する。
{
if(OrderType()==OP_BUY) // 買い注文の場合
{
orderBuy=1。
if(CrossPositionClose()==1) // 条件を満たしていれば注文を閉じる
{ // 条件 CrossPositionClose()=1
price=MarketInfo(Symbol(),MODE_BID);
OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE)を実行。
}
}
if(OrderType()==OP_SELL) // 買いの注文が出されている場合
{
orderSell=1。
if(CrossPositionClose()==2) // を満たす場合、注文をクローズする。
{ // 条件 CrossPositionClose()=2
price=MarketInfo(Symbol(),MODE_ASK);
OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE)を実行。
}
}
}
}
New_Bar=0; // まずゼロ化しよう。
if (Time_0 != Time[0]) // バーの開始時刻がすでに異なっている場合
{
New_Bar= 1; // ここに新しいバーがあります。
Time_0 = Time[0]; // 新しいバー開始時刻を記憶する。
}
MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 0); // 第1MAの現在位置の値
MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1); // 第1MAの前回値
MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 0); // 2番MAの現在値
MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1); // 第2MAの前回値
を返します。
}
//============================================================================================
int CrossPositionClose()
{
PosClose=0; // ここに犬が埋まっている!!!:)
if ((MA1_1>=MA2_0 && MA1_0<MA2_0) || (MA1_1>MA2_0 && MA1_0<=MA2_0)) // CrossPosition Close { (MA1_1>MA1_0 && MA2_0))
{
PosClose=1です。
}
if ((MA1_1<=MA2_0 && MA1_0>MA2_0) || (MA1_1<MA2_0 && MA1_0>=MA2_0)) // 下から上へ渡る
{
PosClose=2。
}
return(PosClose); // 交差点方向を返す.
}
//============================================================================================
//============================================================================================
int MAMethod(int MA_Method)
{
switch(MA_Method)
{
case 0: return(0); //return MODE_SMA=0
case 1: return(1); // MODE_EMA=1 を返す。
case 2: return(2); // MODE_SMMA=2 を返す。
case 3: return(3); //return MODE_LWMA=3
}
}
//============================================================================================
int MAPrice(int MA_Price)
{
スイッチ(MA_Price)
{
case 0: return(PRICE_CLOSE); // PRICE_CLOSE=0を返す。
case 1: return(PRICE_OPEN); //return PRICE_OPEN=1
case 2: return(PRICE_HIGH); //return PRICE_HIGH=2
case 3: return(PRICE_LOW); //return PRICE_LOW=3
case 4: return(PRICE_MEDIAN); //return PRICE_MEDIAN=4
case 5: return(PRICE_TYPICAL); //return PRICE_TYPICAL=5
case 6: return(PRICE_WEIGHTED); //return PRICE_WEIGHTED=6
}
}
//============================================================================================
Sepulca、すでに試しましたが、コンパイラは誓っています。
そんなはずはない、自分でやってみるか......。
Sepulcaさん、ありがとうございます、あなたのコードは動作します。ただ、シフトを元の位置に戻しただけです。
私はより長い時間枠でそれをチェックします、私はこのコードが動作することを確認するために数日間それを拷問します。