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

 
drknn:
もしかしたら、この値はゼロで終わっていて、この最後のゼロは正規化処理で単に捨てられているのでしょうか?エントリ0.1は0.10と同等であり、0は破棄した方が良いから破棄?

ありえない、手で最後のバーの時点でラインの値を見たが、ゼロはなかった...そして、場合によっては値は正確に4桁目に変換され、時には3桁目に変換された。最後の桁が>5であるように
 
drknn:


うまくいかない( 文字列には正しい値を返すが、変数には3桁や4桁のくだりがいっぱいある)。

は、この値を文字列から正しく取得する方法はないのでしょうか?

 
NameLess:


うまくいかない(( 文字列は正しい値を返すが、変数が3桁とか4桁とか、くだらないものばかり。

文字列から正しく値を取得する方法はありますか?


dll-caseを作り、その中で丸めることができます。数字の端数部分を 単純に捨てるには、そんな工夫が必要だったのです。もうひとつわからないのですが、インジケーターコードは5桁で設計されているのでしょうか?この質問には、おそらく開発者でないと答えられないと思います。あるいは、自分でインジケーターを作ればいいのです。
 
drknn:

その中でDLとRを作ることができます。数字の端数部分を単純に捨てるために、このようなことをする必要があったのです。ここではっきりしないのは、インジケーターコードは5桁で設計されているのか?この質問には、おそらく開発者でないと答えられないと思います。あるいは、自分でインジケーターを作ればいいのです。

iMAを確認しましたが、問題ないようです。 正直なところ、何が原因なのかわかりません。
 
NameLess:

iMAを見ましたが、大丈夫そうです。正直なところ、なぜそうなるのか理解できませんが、そうなります。


dll-caseの中身を読むためのリンクをどこで手に入れればいいのか、全くわかりません。あるいは、MQL4を使って文字列に値を入れて、文字列からX文字だけを取り出す関数を作ってみてください。例えば、price = 1.25254130 - この値は文字列に導入されました。この関数は、最初の7文字を調べて、その文字だけを返す必要があります - つまり、1.2525254です。この値を、数珠つなぎにするように、一文字ずつ新しい文字列にループさせていくだけです。そして、double に変換してサブルーチンから返します。

dllについて - このフォーラムでこのようなものを探してくださいhttps://www.mql5.com/ru/forum/124088

 
drknn:


これはもう問題で、少なくともプログラミング言語の表面的な知識は必要なのです。あるいは、値を文字列で受け取り、文字列からX文字だけを取り出す関数を作ってみる。例えば、price = 1.25254130 - この値が文字列に入力されました。この関数は、最初の7文字を調べて、その文字だけを返す必要があります - つまり、1.2525254です。この値を、数珠つなぎにするように、一文字ずつ新しい文字列にループさせていくだけです。そして、double に変換してサブルーチンから返します。

dllについて - このフォーラムでこのようなものを見るhttps://www.mql5.com/ru/forum/124088


i know, not in depth, but not in any language at all))) yes the method is familiar. アドバイスありがとうございます。私は専門的にプログラミングをしたことがないので、dllを扱ったことがないだけです。

正直言って、問題が全く論理的でないため、混乱しています。インジケータから値を取り出すことができない、というか、取り出すことはできるのですが、文字列にしかできません。

 

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

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;     
      OPENORDER ("Buy");
   }

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:

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

あらかじめご了承ください。



私はこの問題を、何らかのアクション(この場合はオープン)の前に条件にフラグを置くことで解決しました。 条件の内部では、注文をオープンした後、フラグはその値を変更し、それぞれ、次のティックでプログラムは注文のオープンでこの条件を入力しません。 もしプロセスが自動化されているなら、オープンポジションが ないときにすべてのフラグをクリアする関数を置くことができ、そうしないとEAは注文を一度オープンしてフェードアウトするだけです、フラグは値を変更しないためです。
 
NameLess:

私は、任意のアクション(この場合は、オープン)の前に条件にフラグを配置することによって、この問題を解決し、注文を開いた後の条件の内部では、フラグが値を変更すると、それぞれ、次のティックで、プログラムは注文のオープニングでこの条件を入力しません。 プロセスが自動化されている場合は、オープンポジションの不在の瞬間にすべてのフラグをクリアする機能を使用して、それ以外のEAが唯一のフラグは値を変更しないので、一度注文し、フェードアウトして開くだろう

例を挙げてください。私はまだ勉強中で、フラグを立てるという作業には直面していません。)
 
nemo811:

例を挙げてください。私はまだ勉強中で、フラグを立てるという作業に直面していないのです。)

私自身はプロではないので、私が解決した方法をお伝えしているだけです。 小さなコードではないので、ゼロからアイデアを得るより、理解するのに時間がかかると思います)))