[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 617

 
drknn:

自分で書く - 1つのループがあります。とにかくやってみることです。もし、失敗したら、ループのコードを見せてください。


私はサイクルに問題があります。

冒頭は何度も見ているのですが......。

next it's foggy....

for (i=0; i<k; i++) {.

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

私が理解できるのは、それぞれのiに...何かが割り当てられているということだけです。

でも、このiの混在したものをどうしたらいいのか......さっぱりわからない......」。

 

リゴニッチ

なるほど、ようやく納得がいくようになった。つまり、中括弧の中の短い文字列は関数呼び出し であり、関数そのものをどこかに配置する必要があるのです。

では、順番に。

initに最初の関数の呼び出しを追加するのは、init関数の起動直後、つまりこのようにすれば、正しく動作するのですね?

int init()
{
    fGet_MineGV();
}
//... и далее мой код, который был ранее

同様に、2つ目の関数の呼び出しをスタートブロックに追加します。変数の計算後、すぐに実行すれば、正しいのでしょうか?例えばこんな感じ。

     if ((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV>V_NN)&&(SUA==0))
{
SUA=100;
SUA1+=1;
}
if((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV<2)&&(VVV>0)) 
SUA=0;
if ((BUA==100)&&(A5<-4.5))
{
SUA=0;
SUA1=0;
}

     if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV>V_NN)&&(BUA==0))
{
BUA=100;
BUA1+=1;
}
if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV<2)&&(VVV>0)) 
BUA=0;
if ((SUA==100)&&(A5>4.5))
{
BUA=0;
BUA1=0;
}
//...сюда вставляю...
{
    fSave_MineGV();
}
//...и далее опять мой код...

この最初の2ステップは正しいですか?

И нервный ваш согестник  дал вам не часть кода, а две готовые функции, которые он дя вас написал. 
まあ、実際、すぐにありがとうございましたって言ったんですけどね。
 

if=trueの場合、ifシリーズから抜け出すにはどうしたらよいですか?

もし

もし

if (TRUE) - しかし、最初からやり直す必要があり、それ以上進めない。

もし

もし

.......

 
lottamer:

ライブラリで正しい関数が見つからなかった

最後に決済したポジションの利食いサイズ。

誰か持ってるかも?


入金通貨でのテイクプロフィットサイズは、OrderProfit()で、終値から始値を引いたpipsで返されますが、最後のクローズポジションをどうやって見つけるか、あるいはそのための既製の関数をどこで手に入れるかは、何度か説明されたかと思います。
 
lottamer:

if=trueの場合、ifシリーズから抜け出すにはどうしたらよいですか?

もし

もし

if (TRUE) - しかし、最初からやり直す必要があり、それ以上進めない。

もし

もし

.......


もし

もし

if (TRUE) - しかし、もう一度最初からやり直す必要があり、それ以上上に行くことはできません。

else {

もし

もし

.......

}//if (TRUE) - しかし、最初からやり直す必要があり、 それ以上上に行くことはできません。

実は、約99.9%のケースで、これはアルゴリズムの実装について十分に考えていないことを意味します。

 
VladislavVG:

もし

もし

if (TRUE) - しかし、もう一度最初からやり直す必要があり、それ以上上に行くことはできません。

else {

もし

もし

.......

}//if (TRUE) - しかし、最初からやり直す必要があり、 それ以上上に行くことはできません。

実は、約99.9%のケースで、アルゴリズムの実装を十分に考えていないことを意味します。


:)) は、すでに解決策を見つけたようです。

return (0) - と素晴らしくすべての場合出てくる。

 
VladislavVG:

もし

もし

if (TRUE) - しかし、もう一度最初からやり直す必要があり、それ以上上に行くことはできません。

else {

もし

もし

.......

}//if (TRUE) - しかし、最初からやり直す必要があり、 それ以上上に行くことはできません。

実は、約99.9%のケースで、これはアルゴリズムの実装について十分に考えていないことを意味します。

},else, return, または break, continue (for loops)で。
 
rigonich:

入金通貨での利益確定 サイズは、OrderProfit()関数で、終値から建値を引いたポイント数で返されます。 最終決済ポジションの見つけ方、またはそのための準備関数はどこで手に入るかは、何度か説明されたと思いますが、この関数では、終値から建値を引いたポイント数で返されます。


その通りです。まず、最後に閉じたポジション のチケットを取得する必要があります GetTicketLastPos 、そしてこのチケットから必要なものを取り出すために標準関数を使用します。

ありがとうございます。

 
xant:

リゴニッチ

なるほど、ようやく納得がいくようになった。つまり、中括弧の中の短い文字列は関数呼び出しであり、関数そのものをどこかに配置する必要があるのです。

では、順番に。

initに最初の関数の呼び出しを追加するのは、init関数の起動直後、つまりこのようにすれば、正しく動作するのですね?

同様に、2つ目の関数の呼び出しをスタートブロックに追加します。変数の計算後、すぐに実行すれば、正しいのでしょうか?例えばこんな感じ。

この最初の2ステップは正しいですか?

まあ、実際、すぐにお礼を言ったんですけどね。


ほとんど。initeでは呼び出しを挿入する前にあった最初の{を削除し、startでは呼び出しの前後にある両方の{}を削除します。 あとは関数コードをコピーして、すべてのEAコードの後に置いてEAをコンパイルするだけです。

すみません、私のミスです。目の前にコードがないときは難しいですね。

int init()
{
fGet_MineGV();
//... и далее мой код, который был ранее (без первой { )
 

リゴニッチ

偶数個のブラケットを残すためにブラケットを外しました。つまり、どちらの関数も中括弧を付けずに挿入される。

その結果、以下のようになりました。

int init()
{
    fGet_MineGV();
//... и далее мой код
//...разрыв кода...
if ((SUA==100)&&(zigNN>4.5))
{
BUA=0;
BUA1=0;
}

fSave_MineGV();
//... продолжение моего кода...

そして、すべてのEAコードの後に、次のコードを挿入しました。

}
}
}


Comment(fd+f+d);

}
//... тут мой советник закончился


        void fGet_MineGV (string fs_PrefName = "") // префикс имени переменной
     {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
     }
               
      void fSave_MineGV (string fs_PrefName = "") // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
 GlobalVariableSet (ls_Name, SUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
 GlobalVariableSet (ls_Name, SUA1);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
 GlobalVariableSet (ls_Name, BUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
  GlobalVariableSet (ls_Name, BUA1);
}

最後の中括弧の後、実はEAとは別にそう受け止めています。これでいいのでしょうか?

合っているならば、コンパイル後はこうなります。

'fGet_MineGV' - function already defined and has a body         K:\TEST\experts\01___AUDUSD.mq4 (1679, 14)
'ls_Name' - variable already defined                            K:\TEST\experts\01___AUDUSD.mq4 (1681, 16)
2 error(s), 0 warning(s)        

Извиняюсь, ошибся, сложно, когда нет кода пнред глазами.Вот так.
もしコードが短ければ、ここに投稿して、すべての問題がすぐに解決されるでしょう。しかし、このEAは1700行あり、さらに3つの外部インジケータがあり、その中でほとんどの計算が行われています...。だからメールのみですが、もう明らかにタダではやっていない。