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

 

extern bool BUY = true;
extern int Magic = 0;
extern double Lot = 0.1;
extern int takeprofit = 0;
extern int stoploss = 0;
extern int slippage = 3;
double SL,TP;
int init(){
return(0);
}.
int start()
{
if (BUY)
{
if (takeprofit!=0) TP =NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;

BUY=false;
}.

return(0);
}.
void OPENORDER(string ord)
{
int error;
while (true)
{ error=true;
if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,",Magic,0){BUY = false;}.
}
return;
}

 
nemo811:

例を挙げてください。私はまだ勉強中で、フラグを立てるという作業に直面していないのです。)
この変数を false に変更するだけで、次のティックで EA はこのブロックに入らず、再起動するまで何も開きません。
 
nemo811:

EAの条件(注文を出すなど)を1ティックごとに繰り返すのではなく、1回だけ実行できるようにするにはどうしたらよいか、アドバイスをお願いします。この場合、EA はポジションを閉じるときに、新しいポジションを開くべきではありません。やってみたが、意図したとおりに動かない。

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



オーダーチケットの保存先の変数名をエラーにしたのはなぜですか?

if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){BUY = false;}; }.

OrderSend()を読むと、勝手に疑問が消えると思うのですが、私ならこんな風に書きます。

void OPENORDER(string ord)
{
int ticket = -1;
 while (ticket<0)
 {ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
  sleep(500);
}
return;
}
 
IgorM:



もしかしたら、私が以前、問題提起をしたのを読んでくれたのかもしれません。解決策は見つかったようですが、mql()で文字列を扱う方法が本には載っていません。

行単位で数字を取り出すには?

 
NameLess:


もしかしたら、私が以前、問題提起をしたのを読んでくれたのかもしれません。解決策は見つかったようですが、mql()で文字列を扱う方法が本には載っていません。

行単位で数字を取り出すには?


MQL4文字列関数の実験用スクリプトを作成 - こちらを参照https://docs.mql4.com/ru/strings
 

ゼロ

どのようなルールで、例えば?

 
drknn:

MQL4の文字列関数を実験するスクリプトを作成する - こちらを参照https://docs.mql4.com/ru/strings/StringSubstr

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


もしかしたら、少し前に私が問題を指摘したのを読んでくれたのかもしれませんね。これで解決しそうなものですが、本にはmqlで文字列を扱う方法が載っていないんですよね(

数字の羅列から数字を取り出すには?

で、数値を文字列に変換するhttps://docs.mql4.com/ru/convert/DoubleToStr

文字列の一部を切り取るhttps://docs.mql4.com/ru/strings/StringSubstr 始めからhttps://docs.mql4.com/ru/strings/StringLen

を実数型に変換し直すhttps://docs.mql4.com/ru/convert/StrToDouble

というのは、文字列を扱うのに必要なのはそれだけなので、たぶんStrToDouble()で十分でしょう。

もう一つの方法は、実数のx乗を10倍して、その結果をint型に与えることです - 私が間違っていなければ、丸めは行われません。

 
IgorM:

数値を文字列に変換するhttps://docs.mql4.com/ru/convert/DoubleToStr

文字列https://docs.mql4.com/ru/strings/StringSubstr の一部をhttps://docs.mql4.com/ru/strings/StringLen の先頭から切り取る。

で、すべてを実数型に変換して戻すhttps://docs.mql4.com/ru/convert/StrToDouble

というのは、文字列を扱うのに必要なのは、StrToDouble()で十分なのかもしれません。

しかし、この「醜い方法」では、丸めずに切り捨ててしまいます。 別の方法として、実数に 10 の x 乗を掛けて、その結果を int 型に渡します - 私が間違っていなければ、丸めはしません。


は、少なくとも*切り取る*、数字はインジケータから文字列にしか取り出せないので...アドバイスありがとうございます、実験してみますね)
 

IgorM:

NameLess です。

ありがとうございました。フラグを立てるロジックと、注文 数を返す機能は理解できました。でも、注文が終了する瞬間も気になる。フラグ条件が再度注文を出そうとしているように見えますが、注文番号を返す関数では注文が1つ少ないと言って、ポジションの開設も初期化しています。見落としがあったら訂正してください。