アプリ版:「スタンプのみでお礼する」機能のリリースについて

ローソク足が21日移動平均線を下から上に(上から下に)ブレイクした時に買う(売る)場合のプログラムがわかりません。
それと、リミットとストップを指定する場合、レートではなくピプス数で指定する事はできないのでしょうか?
よろしくお願いします。

A 回答 (1件)

以下の条件で、サンプルプログラムをベタ張りしておきましたので、参考にどうぞ。



1.条件

(1)移動平均線の計算期間を指定できる。
(2)ポジションは2つ以上持たない。
(3)終値と移動平均線のクロスで必ずドテンをする。
(4)利食いと損切りをPIPSで指定できる。
(5)週末もポジションを持ち越す。

2.サンプルプログラム

#property copyright "Copyright ゥ 2011, xchsshzo."

int init()
{
return(0);
}
int deinit()
{
return(0);
}

//マジックナンバー
#define MAGIC 0000

//パラメーター
extern double Lots = 0.1;
extern int Slip = 3;
extern int MA_Period = 21;
extern double SL = 50;
extern double TP = 50;

//ポジション決済関数

void ClosePositions()
{
for(int i=0; i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slip,White);
break;
}
}
}

//スタート関数
int start()
{
//トレード可否
if(IsTradeAllowed()==false) return(0);

//ポジション数の確認
int Pos1 = 0;
int Pos2 = 0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS) == false) break;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC) continue;
{
if(OrderType() == OP_BUY) Pos1++;
if(OrderType() == OP_SELL) Pos2++;
}
}


//各種変数の宣言
double C1 = Close[1];
double C2 = Close[2];
double MA1 = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,1);
double MA2 = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,2);
int ticket = 0;

//買いシグナル
if(Pos1==0 && C2<=MA2 && C1>MA1)
{
ClosePositions();
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",MAGIC,0);
}

//売りシグナル
if(Pos2==0 && C2>=MA2 && C1<MA1)
{
ClosePositions();
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",MAGIC,0);
}

return(0);
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!