[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 667

 
artmedia70:

友よ、なぜうまくいかないのか、理解できない。

ループ内でマジック5100の位置が見つかった場合、ループは新しいイテレーションに進まなければならない。

...しかし、これは起こらず、5100のマジックナンバーで選択されたポジションは、最も負けるものとして、さらなる計算に参加し始める......。

これがロック式...そして、それに応じて、別のロック式のものがセットされる...。

犬がどこに隠れているのかわかるように...。

以上、ありがとうございました、不要です。自分で犬を見つけたんだ...
 

これまでは、出力値が1つになるような単純な関数を扱ってきました。

その関数は、複数の変数の値を出力できますか?例:Time_1, High_1, Low_1, Time_2, High_2, Low_2.

ありがとうございました。

 
chief2000:

関数は、複数の変数の値を出力することができますか?


関数は1つのパラメータしか返すことができませんが、関数がstart()関数の外で宣言された変数(グローバル 変数)を操作することは誰も禁じていません。
 
DDFedor:

この関数は1つのパラメータしか返すことができませんが、start()関数の外で宣言された変数(グローバル変数)を扱うことは誰も禁じていません。


MA_1>=Ma_2] の場合、Time_1, High_1, Low_1 を返すべきでしょう。

は、クロスオーバーが発生した小節を表す。start()内の本モジュールは

 
chief2000:


だろう?


しかし,このような変数の値は,その関数が再び呼び出されるまで有効であることを考慮しなければなりません.したがって,その変数は,その関数が呼び出さ れた直後に使用しなければなりません.
 
DDFedor:

しかし,このような変数の値は,その関数が再び呼び出されるまで有効であることを考慮しなければなりません.したがって,その変数は,その関数が呼び出された直後に使用しなければなりません.

そうですね、それは理解できます。ありがとうございました。

 
chief2000:

これまでは、単一の出力値を生成する単純な関数を扱ってきました。

その関数は、複数の変数の値を出力できますか?例:Time_1, High_1, Low_1, Time_2, High_2, Low_2.

また、関数宣言において、値ではなく、参照によるパラメータ渡しを 使用することを妨げるものは何でしょうか?例(言語基本/変数/形式パラメータ)。

パラメータを参照渡しすることも可能である。この場合、そのようなパラメータの変更は、参照渡しされる呼び出し側関数の対応する変数に影響します。配列の要素を参照渡しすることはできません。パラメータを参照渡しできるのは、1つのモジュールの範囲内に限られ、ライブラリ関数にはそのような機会はありません。パラメータが参照渡しであることを指定するためには、データ型の後に&修飾子を付ける必要があります。

void func(int& x, double& y, double& z[]) { double calculated_tp; ... for(int i=0; i<OrdersTotal(); i++) { if(i==ArraySize(z)) break; if(OrderSelect(i)==false) break; z[i]=OrderOpenPrice(); } x=i; y=calculated_tp; } ...この場合、注文を確定する前に、注文を確定する必要があります。

配列は参照渡しすることもでき、すべての変更は元の配列に反映されます。単純なパラメータと異なり、配列はライブラリ関数に参照渡しすることも可能です。

func()はvoid型ですが、その実行により、その外で宣言された3つのパラメータがすべて&修飾子で提供されるため、変更されることに注意してください。ちなみに含むと、z[]配列は完全に変化します。
 
Mathemat:

また、関数宣言において、パラメータを値ではなく、参照で渡すことを使用することを妨げるものは何でしょうか?例(言語基本/変数/形式パラメータ)。

func()関数はvoid型ですが、その外側で宣言された3つのパラメータはすべて&修飾子で与えられているため、その実行によって変更されることに注意してください。ちなみに含むと、z[]配列は完全に変化します。

ありがとうございました。

 
どうやるの !前回のトレードが不採算だった場合はロットを変更する必要があり、そうでない場合は変更しない)?
 
rovlent:
どう作るの!?最後の取引が不採算であった場合、ロットを変更すべきですが、そうでない場合 - ダメですか?)


例えば、こんな感じです。

//=================================================
// Расчет размера позиции
//==================================================
double CalculateLots(){
   double Res=dLots;
   bool bProfit=true;
   int PrevTime=-1;
   double tmpLots;
   for (int i=0;i<OrdersHistoryTotal();i++){
      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if (OrderSymbol()!=Symbol())                    continue;
      if (OrderMagicNumber()!=MAGIC)                  continue;
      if (OrderCloseTime()<PrevTime)                  continue;
      PrevTime=OrderCloseTime();
      if (OrderProfit()>0) bProfit=true; else bProfit=false;
      tmpLots=OrderLots();
   }
   double Lots_Step=MarketInfo(Symbol(), MODE_LOTSTEP);
   if (!bProfit) Res=tmpLots+Lots_Step;
   return(Res);
}

DCで設定したステップで増加する。バリエーションが異なる場合もありますが

dLots - デフォルトのポジションサイズ.