if (isLossLastPos(NULL, -1, MAGIC)) Lots_New *= 2; else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Lot;
は関数で、この関数の一番最初にLots_Newという変数に値=Lotを代入しています。
いつも元の状態に戻すと、その後どう変わるか考えてみてください。
どこに書けって言ったんだ?スタート機能の前の 外部変数に...
そして、ロット値を正しいサイズに正規化する。
Lots_New = NormalizeLot(Lot*2, False, "");
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 16.05.2008 |//| Описание : Возвращает нормализованное значение торгуемого лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| lo - нормализуемое значение лота. |//| ro - способ округления ( False - в меньшую, |//| True - в большую сторону) |//| sy - наименование инструмента ("" или NULL - текущий символ) |//+----------------------------------------------------------------------------+double NormalizeLot(double lo, bool ro=False, string sy="") {
double l, k;
if (sy=="" || sy=="0") sy=Symbol();
double ls=MarketInfo(sy, MODE_LOTSTEP);
double ml=MarketInfo(sy, MODE_MINLOT);
double mx=MarketInfo(sy, MODE_MAXLOT);
if (ml==0) ml=0.1;
if (mx==0) mx=100;
if (ls>0) k=1/ls; else k=1/ml;
if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;
if (l<ml) l=ml;
if (l>mx) l=mx;
return(l);
}
著作権
ありがとうございます
もう一度、https://forum.mql4.com/ru/15972/page693、ここで、指標と指標間のパラメータ移動について、専門家に質問したことに戻ります。 もちろん、提案されているグローバル変数の使用によって、この問題は部分的に解決されますが、別の問題が発生しますグローバル変数の記述によると...............。GV変数はdouble型しかありませんが、グローバル変数の値を受け取る際に、Expert Advisorsが特定のシンボルとタイムフレームから受け取った変数かどうかをどのように 判断するのでしょうか。
記号を符号化する。この目的のために変数名を使用することは可能ですが、例えば、EUSRUSD_H1_Var1
ゴーランドプログラムで作られた、あなたのマーチンを加えたものです。
//+------------------------------------------------------------------+
//| 著作権 2005, Gordago Software Corp.
//| http://www.gordago.com/ |
//| バージョン2.0
//+------------------------------------------------------------------+
void OpenBuy() {
double dStopLoss = 0, dTakeProfit = 0;
double Lots_New = Lot;
if (isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Lot;
if (dBuyStopLossPoint > 0)
dStopLoss = Bid-dBuyStopLossPoint*Point;
if (dBuyTakeProfitPoint > 0)
dTakeProfit = Bid + dBuyTakeProfitPoint * Point;
int numorder = OrderSend(Symbol(), OP_BUY, Lots_New, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy).OrderSendを実行します。
if (numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName)を実行します。
}
void OpenSell() {
double dStopLoss = 0, dTakeProfit = 0;
double Lots_New = Lot;
if (isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Lot;
if (dSellStopLossPoint > 0)
dStopLoss = Ask+dSellStopLossPoint*Point;
if (dSellTakeProfitPoint > 0)
dTakeProfit = Ask-dSellTakeProfitPoint*Point;
int numorder = OrderSend(Symbol(,OP_SELL, Lots_New, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell);
if (numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName)を実行します。
}
あなたは
void OpenBuy() {
double dStopLoss = 0, dTakeProfit = 0;double Lots_New = Lot;
if (isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Lot;
は関数で、この関数の一番最初にLots_Newという変数に値=Lotを代入しています。
いつも元の状態に戻すと、その後どう変わるか考えてみてください。
どこに書けって言ったんだ?スタート機能の前の 外部変数に...
そして、ロット値を正しいサイズに正規化する。
Lots_New = NormalizeLot(Lot*2, False, "");
記号をコード化する。ただし、EUSRUSD_H1_Var1 のように変数名を使用することも可能です。
そうですね!ありがとうございました。でも、まだはっきりしない...。その結果、インジケータの中に、可能な記号の数に対応するすべての変数名を書かなければならないことがわかった。また、あらかじめ定義されたタイミングでインジケータからパラメータを渡したい場合は、インジケータのシンボル定義コードを書く必要があります。そして、比較や他のcase型の関数を使って、どの名前のグローバル変数に パラメータを書き込むかを決定するのです ちゃんと理解していますよ!?
そして、ここでも修辞的な質問、あるいはあなたの意見を知りたいのです。分析の本質には、いわゆる「パターン」があります。パターンとは、ある一定の繰り返しの瞬間(あるいはパラメータ)に基づくパターンにほかならない。しかし、残念ながら市場は不安定な物質であるため、すべてのパターンはある程度、パターンの形成に忠実である、不正確なパターン、または特定のパラメータから少し逸脱として扱われることができます。任意の時間枠、例えば15分を分析のベースにすると、そこには一定のパターンが一定の条件で出現することがわかると思います。また、パターンが形成されていない状況もありますが、これらの状況はパターンの形成に非常に近く、ある種のパラメータに適合していない(少しずれている)だけなのです。このような事態は、パターン形成の条件が良ければ避けられたはずだ。この場合、パターン数は多くなり、市場に参入できる可能性は高くなるが、パラメータが厳密に指定されていないため、偽パターンの数が増えてしまう。 (厳密なパラメータを設定すれば、この条件では1日以内にパターンが表示されないことさえあることを考慮すれば)。
質問!どのようなパラメータ(ハードコンディション、ソフトコンディション)でパターンを形成すればいいのでしょうか?
問題を解決するのを手伝ってください
未決済または保留の注文を検索します。利用可能であれば、どちらの注文が買いか売りかを判断しています。ある条件下で(一方が他方より大きいか、3番目より小さい場合)、この注文をクローズしたい。そのパラメータを変更して、もう一度開いてください。
問題は、注文を閉じるシグナルと開くシグナルが常に存在することです。そのため、私の注文は閉められたり、また開いたりしているので、開いたり閉じたりしています・・・。)))
この問題を解決するにはどうしたらよいですか?ガー
その通り!ありがとうございます。でも、まだはっきりしない。私のインジケータでは、すべての変数名を、可能な限りの文字数に対応させて規定する必要があることがわかった。また、あらかじめ定義されたタイミングでインジケータからパラメータを渡したい場合は、インジケータのシンボル定義コードを書く必要があります。そして、比較や他のcase型の関数を使って、どの名前のグローバル変数にパラメータを書き込むかを決定するのです ちゃんと理解していますよ!?
とか、ただの暴論というか、意見を聞きたいだけなんです。分析の本質には、いわゆる「パターン」があります。パターンとは、ある特定の反復する瞬間(あるいはパラメータ)に基づくパターンにほかならない。しかし、残念ながら市場は不安定な物質であるため、すべてのパターンはある程度、パターンの形成に忠実である、不正確なパターン、または特定のパラメータから少し逸脱として扱われることができます。任意の時間枠、例えば15分を分析のベースにすると、そこには一定のパターンが一定の条件で出現することがわかると思います。また、パターンが形成されていない状況もありますが、これらの状況はパターンの形成に非常に近く、ある種のパラメータに適合していない(少しずれている)だけで、パターンが形成されています。このような事態は、パターン形成の条件が良ければ避けられたはずだ。この場合、パターン数は多くなり、市場に参入できる可能性は高くなるが、パラメータが厳密に指定されていないため、偽パターンの数が増えてしまう。 (厳密なパラメータを設定すれば、この条件では1日以内にパターンが表示されないことさえあることを考慮すれば)。
質問!どのようなパラメータ(ハード、ソフトの条件)でパターンを形成すればいいのですか?
問題を解決するのを手伝ってください
未決済または保留の注文を検索します。利用可能であれば、どちらの注文が買いか売りかを判断しています。ある条件下で(一方が他方より大きいか、3番目より小さい場合)、この注文をクローズしたい。そのパラメータを変更して、もう一度開いてください。
問題は、注文を閉じるシグナルと開くシグナルが常に存在することです。だから、私の注文は閉じて、また開くというように、開いたり閉じたりを繰り返しているのです.)))
この問題を解決するには?ガーRoger、ありがとうございます。しかし、まだ正しく動作しません。もう一回トロールしてみましたが、エラーはそのままです :( 1つのポーズをトロールするのと、複数のポーズを同時にトロールするのとでは、何か違いがあるのでしょうか?
なるほど、関数の最初に変数roを定義しておきながら、どこにも代入していない、つまり0になっているんですね。