2016年6月2日木曜日

【EAを作ろう】第十二回 定数3

また定数に戻るのかというところですが、細かな整理とコピペ関数の作成です。

定数にはintやdoubleやboolなど様々なものがあります。
また設定したい項目はexternやinputを前に着けることでできます。

定数にはもう一つ区別があります。
グローバル定数とローカル定数です。
はじめに宣言する関数はグローバル定数といいEAのどこでも参照することができます。

ところが関数の{}内で宣言されたローカル定数は関数の中でしか参照できません。
関数を出ると消えてしまいます。
ではすべてグローバルで宣言すればいいという話ですが・・・


よく使う関数はファイルにしてあります。
コピペ用ですw


int d;int i;
void OnTick(){}
void Exit()
{ for (i=OrdersTotal()-1; i>=0; i--)
  { d=OrderSelect(i,SELECT_BY_POS);
    d=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,clrNONE);
  }
}

これは持っているポジションをすべてクローズする関数です。
保存する時についついコンパイルボタンを押してしまいます。
OnTick()がないと「動かす気有るの?」とエラーが出ます。
そこでダミー void OnTick(){} を入れています。

さて、コピペ用関数 Exit() ですが void Exit() 以下をコピペします。
しかし、定数 i , d の宣言が足りません。
コピー先の先頭にもどって宣言しているかどうかを確認して、
宣言されていない時は貼り付けるのですが面倒です。
そこで!!

void OnTick(){}
void Exit()
{ for (int i=OrdersTotal()-1; i>=0; i--)
  {int d=OrderSelect(i,SELECT_BY_POS);
    d=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,clrNONE);
  }
}

こうすれば解決です。今回のiやdの様に関数内でしか使わない時はローカル定数にするといいですね。

また関数内で宣言して値を保持したい時は
static int A=1;のような記述ができます。
使い道は・・・




0 件のコメント:

コメントを投稿