プロが教えるわが家の防犯対策術!

メタトレーダーでCloseがある値を抜けたらフラッグを立てて、変更注文が出せるプログラムを
考えています。簡単に書くと

int start()
{
int Position=-1;
int Flag;
for(it=0;i<OrdersTotal();i++){ //ポジションチェック
if(OrderSelect(i, SELECT_BY_POS) == false) break;
if(OrderSymbol()==Symbol()) Position = i;
}
if(Position==-1){ポジションが無ければ注文。省略}
else
{
  OrderSelect(Ticket,SELECT_BY_POS); //ポジション選択
  if(OrderSymbol()==Symbol()){
    double EntryPrice = OrderOpenPrice(); //オープン値

//50pips以上になったらストップロス値を変更
if(EntryPrice + 50 * Point < Close[0] && Flag == 0) {
Flag = 1;
double SL2 = EntryPrice;
MyOrderModify(SL2, 0, MAGIC);
}
//100pips以上になったらストップロス値を変更
else if(EntryPrice + 100 * Point < Close[0] && Flag == 1) {
Flag = 2;
double SL3 = EntryPrice + 50 * Point;
MyOrderModify(SL3, 0, MAGIC);
}
//--省略

以上です。このプログラムだとフラグを保持することができません。
ティックが変わるたびにstart()が呼ばれ、フラグは0になってしまいます。
もしいい方法がありましたらご教授ください。よろしくお願いします。

A 回答 (3件)

ティックが変わるたびに変数が初期化されないように、以前の数値をそのまま維持させる方法は、



1.グローバル変数を利用する。

わかりやすく言えば、その変数をstart()関数の前におけばよいです。

2.static変数を利用する。

わかりやすく言えば、

static int Flag;

というように、データ型の前に、staticという文字を付け加えるだけです。
    • good
    • 0
この回答へのお礼

くわしい説明ありがとうございます。
まだstaticなしとstaticありの違いが
よく分かっていませんが、これから検証してみます。

お礼日時:2010/03/15 12:58

すみません、訂正です。



「グローバル変数」→「外部変数」です。

もちろんグローバル変数を使ってもいいみたいですが。
    • good
    • 0

プログラムの内容は把握していませんので動作は確認出来ないですが、ティックが変わるたびにリセットされないように、


int Flag;をint start()より前に置けば良いと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
print文で検証してみます。

お礼日時:2010/03/15 12:48

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