どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1154

 
KhuKhu:

こんにちは、友人たち。

ストップロス、テクプロフィット、トレイリングの値をピップスではなくパーセントで表示させる方法。

この数式はごちゃごちゃしすぎていて、まったく機能しない。

StopLoss=NormalizeDouble(Bid-(Bid-TrailingStop)/100*TRAL_PERCENT,Digits)となります。

一番シンプルな形のパーセンテージが欲しいです。

ダブルストップロス=0.05。

--------

利益=ビッド-ストップロスのパーセンテージ(雑な例 ですが、わかりやすくするためです。)

ありがとうございます。

杜撰な例は杜撰な答えにつながる。それを理解するためには、何からその割合を測っているのかを理解する必要があります。

 
Андрей Касторский:
..必要な人は誰でも EAを 書くのに役立つ。 にメールしてください。お手伝いします

ゼロバーからの価格を取るのに役立つ、以下は議論です。

https://www.mql5.com/ru/forum/160683/page237#comment_5350688

 
Alexey Viktorov:

薄っぺらい例は、薄っぺらい答えを生む。理解するには、パーセンテージが何に対してのものかを理解する必要があります。

了解です。

もっと分かりやすく説明します。

私のコードは、もともと次のように書かれています。

extern double StopLoss =0;

extern double TakeProfit =0;

extern double SL_PERCENT = 0.02;

extern double TP_PERCENT = 0.03;

extern double TRALL_PERCENT = 0.01;

extern double Lots =0.5;


チケット=OrderSend(Symbol()、OP_SELL、Lots、Bid、3、NormalizeDouble(OrderOpenPrice+(OrderOpenPrice + StopLoss)/100*SL_PERCENT、桁数)、NormalizeDouble(OrderOpenPrice - TakeProfit)/100*TP_PERCENT、桁数)、", Mag,0,Red).Ticket=OrderSend(Symbol()).Ticket=OrderSend(Lots).Ticket(Lots).Ticket(Lots).Ticket(OR),",",",";

StopLossが発動されますが、0.02%ではなく、0.43%で発動され、これは誤りです。TakeProfitは試したことがないので分かりませんが、こちらも不正解のようです。

コードが正しくないという指摘があります。

もうひとつ、大事なことかもしれません。私のデポは3~4組分すべて注文が開かれています。時には5人で。


また、StopLoss, Takeprofit, TrailingStopなどのパラメータをポイントではなく、パーセントで変更したいのですが。

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

1) Takeprofit=OrderOnProfit+%TP_PERCENT(利益率)

2) ストップロス=OrderOnPrice-%SL_PERCENT

すなわち

ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,%,%,", Magic,0,clrGreen);


トレーリングのためにさらに改造する方法がわからない。

チュートリアルのサンプルを参考にしたのですが、明らかに間違っているようです。

3.) TrailingStop=Bid-%TRALL_PERCENT(トレーリングストップ)。

case 0: // 買い注文

if (NormalizeDouble(OrderOpenPrice-SL*Point,Digits)*SL_PERCENT/100<=(OrderOpenPrice-Ask) // 以下なら。

NormalizeDouble(ビッド-(ビッド-TS)/100*TRAL_PERCENT,ディジット)

|| NormalizeDouble(SL,Digits)==0)

{

SL=Bid-TS*Point; //次に修正する

string Text="Buy "; // Buyのテキスト

Modify=true; // モディファイに割り当てられる。

}


本当に説明できていたのだろうか。

ありがとうございます。

 

取引開始(OrderSend)をローソク足の始まりに厳密に実装する方法 - OnTimerとOnTickの両方またはどちらか。

ターミナルに過負荷をかけないため(20~30個のチャートを同時に開いて追跡する)?

ローソク足開始時の新しいティックの出現が最大5~10秒遅れること、前のティックとのギャップが大きいこと(取引条件としてマイナス)を発見した。

p.s. 同時にExpert Advisorでは、取引開始の1-2分前、つまりローソク足が始まる前に取引の可能性について通知することになっています。

 
maxsoft:

取引開始(OrderSend)をローソク足の始まりに厳密に実装する方法 - OnTimerとOnTickの両方またはどちらか。

端末に負荷をかけないようにするため(20-30個のチャートを同時に開いて追跡する)?

ローソク足開始時の新しいティックの出現の遅れは、前のティックと大きなギャップがあり、最大5-10秒になることが判明した(それは取引条件にとってマイナスである)

p.s. この場合、Expert Advisorは取引開始の1-2分前、つまりローソク足が始まる前に取引の可能性を事前に通知することになっています。

新しいバーが表示されるかどうかを確認するには、タイマーで開いているすべてのチャートを表示する必要があります。

各オープン・チャートの各タイムフレームに1つずつ、クラスのインスタンスへのポインタの配列を作成する必要があります。

新しいバーのオープンを監視するクラスは、こちらの記事で 紹介しています。

チャートを開く - 開いているチャートの配列に追加する。チャートを閉じる - 配列から削除します。

タイマー内のループでは、クラスのインスタンスへのポインタの配列を渡して、新しいバーが形成された場合にクラスが返す、新しいバーのオープンの事実をチェックします。

 
Artyom Trishkin:

新しいバーが表示されるかどうかを確認するには、タイマーで開いているすべてのチャートを表示する必要があります。

クラスインスタンスへのポインタの配列を作成する必要があります ...

MQL4を使うのはどうでしょうか?

そして、「...取引開始の1~2分前、つまりローソク足が開く前に、取引の可能性を事前に通知することになっています」、つまり、バーの内側で行うことです

削除済み  

トピックへようこそ https://www.mql5.com/ru/forum/208120#comment_5412193

コンセンサスが得られない。

Играем в блиц ЧТО? ГДЕ? КОГДА? 3 вопроса по 20 секунд
Играем в блиц ЧТО? ГДЕ? КОГДА? 3 вопроса по 20 секунд
  • 2017.07.07
  • www.mql5.com
Народ, подскажите пожалуйста, заморочился я тут по поводу AccountBalance() и AccountLeverage(). 1...
 

doubl型を表示する前に、小数点以下2桁に正規化するのですが、うまくいかないことがあります。なぜ?以下は、そのコードの一部です。

prof[num]=(string)NormalizeDouble((double)prof[num]+(double)profit2,2);

prof[]型は文字列

そして、以下のように不具合が発生します。


 
Vladimir Tkach:

doubl型を表示する前に、小数点以下2桁に正規化するのですが、うまくいかないことがあります。なぜ?以下は、そのコードの一部です。

prof[]型は文字列

以下のような不具合が発生します。


DoubleToString()

DoubleToString

数値からテキスト文字列に変換する。

文字列DoubleToString(
doublevalue,//number
intdigits=8//小数点以下の桁数
);

パラメータ

価値

[in] 値は浮動小数点数です。

すうじ

[in] 精度の形式。digitsの値が0から16の場合、小数点 以下の桁数を指定した文字列表現で数値を取得する。桁数が-1以上-16以下の場合は、小数点以下の桁数を指定した科学的形式による数値の文字列表現が得られます。それ以外の場合は、文字列表現で小数点以下8桁の数値となる。

戻り値

指定された精度形式での数値の文字表現を含む文字列。

Print("DoubleToString(120.0+M_PI) : ",DoubleToString(120.0+M_PI);
Print("DoubleToString(120.0+M_PI,16) : ",DoubleToString(120.0+M_PI,16)");
Print("DoubleToString(120.0+M_PI,-16) : ",DoubleToString(120.0+M_PI,-16)");
Print("DoubleToString(120.0+M_PI,-1) : ",DoubleToString(120.0+M_PI,-1)");
Print("DoubleToString(120.0+M_PI,-20) : ",DoubleToString(120.0+M_PI,-20)");

 

何か不思議な虫とか。

入力で追加しています。

input datetime test                                =0;

コンパイルします。日付1970.01.01ゼロの場合、設定で時間を00、01、02に設定することはできません。