case2 : // кейс для открытия Sell по AUD/USDif(TimeServer() == true)
{
if(Symbol() == AUDUSD)
{
RefreshRates();
Open_Order = OrderSend("AUDUSD",OP_SELL,lot,Bid,0,0,0);
Alert("Тикет открытого ордера ", Open_Order, GetLastError());
//-------------------------------------------------------------------------------------------------------------// другая функция//-------------------------------------------------------------------------------------------------------------int AUDUSD_Analizing()
{
if(AUDUSD_Prices_new > AUDUSD_Prices_old)
{
s1 = AUDUSD_Prices1;
s2 = AUDUSD_Prices2;
s3 = s1 - s2;
if(raznica > s5)
{
Alert("--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---");
вот в этом месте мне необходимо обратиться к case 2 - вызвать его запуск на исполнение, затем
отсюда же необходимо обратиться к case 5 (к примеру), case 9, case 16 и т.д.
и только потом завершить исполнение данной функции и вернуться в старт
string symb;
ENUM_ORDER_TYPE ordType;
switch(???)
{
case1
symb = "audusd";
ordType = OP_BUY;
break;
case5
symb = "gbpusd";
ordType = OP_BUY;
break;
case9
symb = "eurusd";
ordType = OP_BUY;
break;
}
// И дальше получение цен, определение СЛ и ТП с последующем открытием ордера.
しかし、私見では、ユーザー定義関数ですべてを包む方が良いと思います。
void openOrder(string symb, ENUM_ORDER_TYPE ordType)
{
// Символ и тип ордера передаётся при вызове функции. Здесь достаточно получить соответствующие цены и открыть ордер.
}
はなく、例えば、まずケース1を通し、次にケース2を通す、など。
ケースは、注文の開始を実行します。
注文が複数個所で開かれている。このコードできっちり考えないといけないし、難しいですね。
オープニングは1つだけではありません。このようなコードでは、自分の考えを正確に伝える必要があり、それが難しいのです。
EAのOnTickの中にそれなりの時間がかかるループがある場合、それが完全に実行されるのか、それとも新しいティックの到着がそのすべてを中断させるのか。
私の場合、ループが開始され、すべての注文が開始されるわけではなく、いくつかは2回開始され、いくつかはスキップされます。新しいティックが開始のトリガーとなり、コードは実行を中断して再び動作を開始することは理解しています。
新しいティックが開始のトリガーとなり、コードが実行を一時停止し、再び実行を開始することは理解しています。
を作らないでください。
ヘルプを読むと、EAで複雑な計算をした場合、新しいティックがスキップされることが明確に書かれています。
イベント処理関数に関する 記事のどこか、あるいは取引操作、RefreshRatesのどこか
コードのロジックエラーを探す
HH: switch() - 複雑な論理条件にはcaseを使用せず、if() elseの組み合わせが良い - そうすれば、より曖昧さのない論理分岐が得られる。
は作らないでください。
ヘルプを読むと、EAで複雑な計算をした場合、新しいtickはスキップされるとはっきり書いてあります。
イベント処理関数に関する 記事のどこか、あるいは取引操作、RefreshRatesのどこか
コードのロジックエラーを探す
SZY: switch() - 複雑な論理条件にはcaseを使用せず、if() elseのより良い組み合わせで、より曖昧さのない論理分岐を得ることができます。
そうなんです、ありがとうございます。
なぜここにスイッチを追加したのか、まったくもって疑問です。取引の方向と 必要な開口数を関数に取り込み、ループの中で指定された数だけ開口する方が簡単です。
だから、あなたの論理を理解することは、私の頭には無理だと言っているのです。なぜ、こんなにも混乱するのか?
なぜここにスイッチを追加したのか、まったくもって疑問です。取引の方向と 必要な開口数を関数に取り込み、ループの中で指定された数だけ開口する方が簡単です。
だから、あなたの論理を理解することは、私の頭には無理だと言っているのです。なぜ、こんなにも混乱するのか?
まあ、私のコードが増えただけなので、もっと簡単だと思ったのですが。
実際、1つの関数の実行中に何度でもcaseを呼び出す機会があれば、よりシンプルでコンパクトになります。
似たような案件をループで開く必要はなく、シグナル発生時に異なるシンボルに対して同時に(可能な限り)開かれるんだ。
ケース 1 - audusd の購入
ケース 5 - 英国ポンド買い
ケース9 - EURUSD買い
など
最初のケースでは、1枚にケース、2枚目に分析を書いていますが、それらが相互に作用すると、500行になります。
2つ目の方法は、関数内部で特定の順序で解析を開始する必要があり、総行数が1200行以上となり、プログラムの実行速度に影響します。
助けてください!お願いしますExpert Advisor は、偏差を動的に計算する Envelopes インジケータを使用しています。しかし、チャート上に表示されると、以前のすべてのバーにおけるインジケータの偏差のすべてのダイナミクスが表示されます。
1.インジケータを正しく描画させる方法はありますか?つまり、そのインジケータをそのバー上にのみ、その偏差で描画するのです。
2.Expert Advisorのインジケータの描画を無効にし、計算のみを残すにはどうすればよいですか?エキスパート設定でインジケータの描画を有効・無効にしたいのですが......。)
まあ、結局、もっとシンプルにできると思っていたのに、私のコードは大きくなるばかりでした。
とにかく、1つの関数の実行中に何度でもcaseを呼び出すことができれば、もっと簡単で、コードもコンパクトになるはずです。
似たような案件をループで開く必要はなく、シグナル発生時に異なるシンボルに対して同時に(可能な限り)開かれるんだ。
ケース 1 - audusd の購入
ケース 5 - 英国ポンド買い
ケース9 - EURUSD買い
など
最初のケースでは、1枚にケースを、2枚目に分析を書いていますが、これらが相互に作用すると500行になります。
2つ目の方法は、関数内で特定の順序の開口部を分析することを意味し、おむすびに引き伸ばされ、総行数は1200 以上になり、最終的にプログラムの実行速度に影響を与える。
何をもって何行も打ち込んでいるんだ?これは私の最後のEAの一つで、FORTSの証券のセットで動作します。
多くの証券が上場されれば、それだけ多くの取引が行われることになります。そして、このEAは、2つの取引時間枠を制御し、トレーリングを行い、もちろん分析も行い、わずか326行です。
switchを使用する場合、各バリアントでポジション開閉を追加する必要はありません。シンボル名、取引操作の 種類を指定するだけで十分です。
しかし、私見では、ユーザー定義関数ですべてを包む方が良いと思います。