MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 155

 
Alexander Antoshkin:

何ができる...?

電球1個を交換するのに必要なホビットの数を計算する?

フリーランスに送る?そこで読め」と書く?

例のようにヒストリーで一連の注文を閉じる際の座標を求めるにはどうしたらよいでしょうか(この時点で線を引く予定です)

私はすでにこのスレッドの151ページでこの質問をしていますが、もっともらしい解決策は見つかっていません ... https://www.mql5.com/ru/forum/160683/page151



履歴の中から同じクローズバーを持つ一連の注文を探す必要があります。このバーの時間は、あなたが探しているものになるでしょう。
 
Alexander Antoshkin:

何ができる...?

電球1個を交換するのに必要なホビットの数を計算する?

フリーランスに送る?そこで読め」と書く?

いろいろなことができるんです:)

ホビットの問題は、一律に解決できるものではありません...。

因みに、私の答えは、ヴィタリー・ポストラッシュ さんが引用したのと同じ動画からです。

でも、真面目な話。

例のように履歴で一連の注文を決済した取引の座標を求めるにはどうすればよいか(この時点では線を引く予定です)

すでにこのスレッドの151ページでこの質問をしましたが、解決策は見つかっていません。https://www.mql5.com/ru/forum/160683/page151

リンク先の枝は読んでいません。でも、こんな感じでしょうか。

複数の注文(1種類または異なる種類)がXポイント(現実にはすべての取引が同じ価格で決済されるとは限らないのでXの範囲が必要)以内に決済された事実を判定し、平均決済価格を決定し、その線で線を引く。

 
Artyom Trishkin:
同じ終値バーを持つ一連の注文の履歴を検索します。このバーの時間は、あなたが探しているものになるでしょう。
これは、私の解決方法と同じ問題で、Pingや注文 数によっては、1本のローソク足のすべてのトレードが終了しないことがあります...。
 
Alexey Kozitsyn:
私の解決方法と同じ問題:Pingや注文数 によっては、同じローソク足のすべての取引が終了しないことがある......。
M1については、私もそう思います。他の人はそうではないでしょう。ローソク足が開く前に決済注文が来る場合は別です。注文は2組になります。隣り合った2つのうち、最後の1つを取る。
 
Artyom Trishkin:
M1については、私もそう思います。他の人はそうではないでしょう。ローソク足が開く前に決済注文を受けた場合。注文は2組になります。隣り合った2つのうち、最後の1つを取る。

ここで判断するためのデータはほとんど与えられなかった。複数のパックが同じローソク足で閉じられるかもしれない(たとえば1時間足や日足でチェックした場合)。

 
Vitalie Postolache:


平行な赤い線が欲しいのですが、交差させ、そのうち3本を緑、残りを紫にしたい )))

そうそう、あの子猫の形をした一本の直線も!?

問題が間違っていると思われますか?

 
Alexey Kozitsyn:

判断するための十分なデータがありません。複数のパックが同じローソク足で閉じている可能性があります(例えば、時間足や日足で確認した場合)。

いずれにせよ、精度が高ければ高いほど良いのですが.

トレーリングストップ条件に従って、損失なく注文が終了すること。

即ち

if(b+s>0)
{
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
tip = OrderType();
OSL =NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
。OOP = NormalizeDouble(OrderOpenPrice(),Digits);
。SL=OSL;
if(tip==OP_BUY)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(SL>OSL && SL>NLb)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White))Print("Error Order Modify ",GetLastError());
}
}
if(tip==OP_SELL )
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
if((SL<OSL || OSL==0) &&)SL<NLs)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White))Print("Error Order Modify ",GetLastError());
}.

 
Alexey Kozitsyn:
新しいバーが形成されたときに値が入力される追加のバッファを含む独自のMAインジケータを作成します。

移動平均の 平均化手法の違いも含めて、問題を解決するためのアルゴリズムについて議論したい。

 
Alexey Kozitsyn:

いろいろなことができる:)

複数の注文(同じ種類または異なる種類)をXポイント(現実にはすべての取引が同じ価格で成立するとは限らないため、Xポイントの範囲が必要)以内に成立させた事実を確認し、平均終値を決定し、その線で線を引く。

int TotalPos=-1;

void start()
{
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
} 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+'Open',OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+'Open',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Open',OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+'Line',OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+'Line',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Line',OBJPROP_WIDTH,1);
   ObjectSet(Ticket+'Line',OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+'Line',OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+'Close',OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+'Close',OBJPROP_COLOR,Green);
   ObjectSet(Ticket+'Close',OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+'Profit',OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+'Profit',OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+'Profit',DoubleToString(prAll,2),10,'Arial',White);
   ObjectSet(Ticket+'Profit',OBJPROP_PRICE1,d);
   ObjectSet(Ticket+'Profit',OBJPROP_TIME1,c+Period()*60*2);

これはスクリプトに追加する必要があります.

一連の売り注文が決済されることを考慮すると

ObjectCreate(Ticket+'Debt B',OBJ_HLINE,0,0,d)。
ObjectSet(Ticket+'Debt B',OBJPROP_COLOR,LimeGreen)。
ObjectSet(Ticket+'Debt B',OBJPROP_WIDTH,1)。

一連の買い注文が終了した場合

ObjectCreate(Ticket+'Debt M',OBJ_HLINE,0,0,d);
ObjectSet(Ticket+'Debt M',OBJPROP_COLOR,Red)。
ObjectSet(Ticket+'Debt M',OBJPROP_WIDTH,1)。

手伝ってくれる?
 
-Aleks-:

移動平均の 平均化方法の違いも含めて、この問題に対処するためのアルゴリズムについて述べたいと思います。

ターミナルのIncludeフォルダにあるMovingAverages.mqhというファイルを見てみてください。