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

//+------------------------------------------------------------------+
//| パラメータ |
//+------------------------------------------------------------------+
extern string X = "Basic Settings"; //基本設定
extern int MagicNumber = 10011; //マジックナンバー
extern double TakeProfit = 200; //リミット[pips]
extern double StopLoss = 150; //ストップ[pips]
extern double Lots = 0.1; //ロットサイズ
extern int Cmd = OP_BUY; //エントリー方法[OP_BUY/OP_SELL]
extern int Slippage = 30; //スリッページ

extern string XX = "Order Settings"; //新規注文設定
extern bool CheckOrderHour = true; //時間の判定有無
extern int OrderHour = 7; //時間
extern bool CheckOrderMinute = true; //分の判定有無
extern int OrderMinute = 5; //分
extern bool CheckOrderSeconds = true; //秒の判定有無
extern int OrderSeconds = 0; //秒

extern string XXX = "Close Settings"; //決済注文設定
extern bool CheckCloseHour = true; //時間の判定有無
extern int CloseHour = 7;//時 //時間
extern bool CheckCloseMinute = true; //分の判定有無
extern int CloseMinute = 40;//分 //分
extern bool CheckCloseSeconds = true; //秒の判定有無
extern int CloseSeconds = 0;//秒 //秒


//+------------------------------------------------------------------+
//| 開始関数 |
//+------------------------------------------------------------------+
int start()
{
if((TimeHour(TimeCurrent()) == OrderHour
|| CheckOrderHour == false)
&&(TimeMinute(TimeCurrent()) == OrderMinute
|| CheckOrderMinute == false)
&&(TimeSeconds(TimeCurrent()) == OrderSeconds
|| CheckOrderSeconds == false))
{
if(Cmd == OP_BUY){
OrderSend(Symbol(),
Cmd,Lots,
Ask,
Slippage,
Ask-StopLoss*Point,
Ask+TakeProfit*Point,
"",
MagicNumber,
0,
Red);
return(0);
}
if(Cmd == OP_SELL){
OrderSend(Symbol(),
Cmd,Lots,
Bid,
Slippage,
Bid+StopLoss*Point,
Bid-TakeProfit*Point,
"",
MagicNumber,
0,
Blue);
return(0);
}
}

if((TimeHour(TimeCurrent()) == CloseHour
|| CheckCloseHour == false)
&&(TimeMinute(TimeCurrent()) == CloseMinute
|| CheckCloseMinute == false)
&&(TimeSeconds(TimeCurrent()) == CloseSeconds
|| CheckCloseSeconds == false))
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false)
{
break;
}

if(OrderSymbol() == Symbol()
&& OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(),
OrderLots(),
Bid,
Slippage,
Yellow);
return(0);
}

if(OrderType() == OP_SELL)
{
OrderClose(OrderTicket(),
OrderLots(),
Ask,
Slippage,
Lime);
return(0);
}
}
}
}

return(0);
}

A 回答 (2件)

お困りとのことなので、対策例を。



int start()
{

の後ろに、
if(OrdersTotal() == 0){
を入れる。さらに、

if((TimeHour(TimeCurrent()) == CloseHour

の前に

}

を一つ足す。
これで、問題解決です。

しかし、MQLを直接書くとスペースが消えてしまうので、マヌケなプログラムに見えるのが、、、今の悩みです。。。
    • good
    • 0
この回答へのお礼

ありがとうございます、本当に助かりました。

お礼日時:2013/06/14 02:36

な~んだ、ちゃんとプログラムを書いてたなら、そう言ってくれればいいのに ^^;



さて、それではこっちも出し惜しみをしましょう(ウソ)。

「ポジションを同時に2個持つのを直したい」と書かれてますが、2つ持つのは偶然でしかなく、1つだけの時もありますよね。
もっと言えば、ちょっといじると、無限にポジションを持ってしまう恐れがある危険なプログラムです。

以上がヒントです。

この回答への補足

返答ありがとうございます。
おっしゃるとおり1個のときもあれば2個の時もあります。確かに複数持つ場合もありました。
どうすればいいのですか?実はかなり困ってますm(_ _)m

補足日時:2013/06/14 01:13
    • good
    • 0

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