初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1096

 
EgorKim:

AとBのポイントの時間や価格を持っている

C地点の時間と価格を知るには? AとBの中間地点にあるんです。

どこにも例がない


//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+
 
EgorKim:

AとBのポイントの時間や価格を持っている

C地点の時間と価格を知るには? AとBの中間地点にあるんです。

どこにも例がないんです。


時間C = 時間B - ((時間B - 時間A) / 2)

C時点の価格

 
Сергей Таболин:

時間C = 時間B - ((時間B - 時間A) / 2)

時間帯別価格 C

チェックしました、時々週末に)

線そのものの中心を知る方法はないのでしょうか?

以下は私のセリフです。

void SetLow(double price_1,double price_2,datetime time_1,datetime time_2)
  {
   ObjectCreate(0,"Low",OBJ_TREND,0,time_2,price_2,time_1,price_1);
   ObjectSetInteger(0,"Low",OBJPROP_COLOR,clrAqua);
   ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
   ObjectSetInteger(0,"Low",OBJPROP_STYLE,STYLE_DOT);
   ObjectSetInteger(0,"Low",OBJPROP_BACK,false);
   ObjectSetInteger(0,"Low",OBJPROP_RAY_RIGHT,true);
  }
 
Igor Makanu:

最後に開いた注文のチケットはどうやって調べるのですか? そうはいかないんです。

具体的に何を知りたいのですか?ORDER、ORDER、POSITIONという用語を明確に区別する必要がある。

第二に、CTradeクラスのオブジェクトに "order_1" " "order_2 "という名前をつけることで、すぐに混乱を引き起こしていますね。 以前はCTradeクラスのオブジェクトを「m_trade_1」「m_trade_2」と呼んでいたそうです。使い勝手には影響しませんが、混乱が大きくなってしまいます。

第三に、PositionClose メソッドは、ゼロに等しいポジションチケットを渡す(OnInit()でゼロで初期化する)だけでは動作しないことです。- このような理想的な状態、つまり1位がチケット「0」の状態は、テスターでしか得られないのです。

第4回:バイ・ メソッド

備考

Buy(...)メソッドが正常に終了しても、取引が正常に行われるとは限りません。ResultDeal()メソッドの戻り値だけ でなく、ResultRetcode() メソッドを呼んで、取引要求の実行結果(取引サーバーのリターンコード)を確認する必要があります。


ResultDeal() メソッド

READチケットを取得します。

 
Vladimir Karputov:

具体的に何を知りたいのですか?ORDER、ORDER、POSITIONという用語を明確に区別する必要があります。

次に、CTradeクラスのオブジェクトに "order_1 "と "order_2 "という名前をつけることで、すぐに混乱を引き起こしていますね。 以前はCTradeクラスのオブジェクトを「m_trade_1」「m_trade_2」と呼んでいたそうです。使い勝手には影響しませんが、混乱が大きくなってしまいます。

第三に、PositionClose メソッドは、ゼロに等しいポジションチケットを渡す(OnInit()でゼロで初期化する)ため、動作しません。- このような理想的な状態、つまり1位がチケット「0」の状態は、テスターでしか得られないのです。

第4回:バイ・ メソッド

備考

Buy(...)メソッドが正常に終了しても、取引が正常に行われるとは限りません。ResultRetcode() メソッドで取引要求の結果(取引サーバーのリターンコード)を確認し、ResultDeal()メソッドの返す値も 確認する必要が あります。


ResultDeal() メソッド

RECEIVED チケットを取得します。

ありがとうございました。もうわかったよ

一般的には、情報、噂話、チャンスの多さからくる問題だったのですが......。は、OnTradeTransaction()イベントがたまに記憶されるので、Result()でチケットをキャッチすることはできないだろうと確信していました.を、オンにしています。

現在、MT5テスターで作業中ですが、再現性のある例を探しています。

またよろしくお願いします

このコードは、テスターの最後の注文のチケットを取得することができます。

//+------------------------------------------------------------------+
//|                                                   tst_CTrade.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"

input double Lot_1 = 0.10;
input double Lot_2 = 0.20;
input ulong  Magic1 = 12345;
input ulong  Magic2 = 67890;
#include<Trade\Trade.mqh>
 CTrade order_1,order_2;
ulong   ticket_1,ticket_2;
//_______________________________________________________________________ 
class CNewbar
  {
private:
   datetime          mnewtime;
   ENUM_TIMEFRAMES   mperiod;
public:
                     CNewbar()                        { mperiod=PERIOD_CURRENT;  mnewtime=TimeCurrent(); }
                     CNewbar(ENUM_TIMEFRAMES period)  { mperiod=period;          mnewtime=TimeCurrent(); }
   bool              NewBar(){ datetime t=iTime(NULL,mperiod,0); if(mnewtime<t){ mnewtime=t; return(true); } return(false);  }
  };
//_______________________________________________________________________ 

CNewbar Bar_H1(PERIOD_H1);
CNewbar Bar_M30(PERIOD_M30);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   order_1.SetExpertMagicNumber(Magic1);
   order_2.SetExpertMagicNumber(Magic2);
   ticket_1 = 0;
   ticket_2 = 0;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Bar_H1.NewBar())
     {
      order_1.PositionClose(ticket_1);
      if(order_1.Buy(Lot_1))
        {
         ticket_1=order_1.ResultOrder();
         Print("NewBar H1, ticket_1 = ",ticket_1);
        }
     }

   if(Bar_M30.NewBar())
     {
      order_2.PositionClose(ticket_2);
      if(order_2.Sell(Lot_2))
        {
         ticket_2=order_2.ResultOrder();
         Print("NewBar M30, ticket_2 = ",ticket_2);
        }
     }
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

ありがとうございました。もう、わかったよ。

一般的には、情報、噂話、可能性などが氾濫していることが問題だったのですが......。は、OnTradeTransaction()のイベントがたまに記憶されるので、Result()でチケットをキャッチできないと確信していました.を、オンにしています。

現在、MT5テスターで作業中ですが、再現性のある例を探しています。

またよろしくお願いします

このようなコードは、テスターで最後のオーダーのティックを取得することができます。

はい、ResultOrderを使用すると、オーダーチケットが 取得できます。

 
Vladimir Karputov:

はい、ResultOrderで、注文のチケットを 取得することができます。

しかし、CTradeを使用する際に別の問題が発生しました。それは、記憶された注文チケットがあり、PositionClose(m_ticket)を使用してそれを閉じることができます。

MQL4では、注文がクローズされているかどうかを調べるのはとても簡単でした。 OrderSelect()を使って選択し、if(OrderCloseTime()>0) - close time is not equal to 0, if the order is closed.をチェックすれば、クローズされているかどうかが分かります。

SB CTrade を使用して注文が終了したかどうかを知るにはどうすればよいですか?

 
Igor Makanu:

しかし、CTradeを使用する際に別の問題が発生しました。それは、記憶された注文チケットがあり、PositionClose(m_ticket)を使用してそれを閉じることができます。

MQL4では、注文がクローズされているかどうかを調べるのはとても簡単でした。 OrderSelect()を使って選択し、if(OrderCloseTime()>0) - close time is not equal to 0, if the order is closed.をチェックすれば、クローズされているかどうかが分かります。

SB CTradeを使用して注文が終了したことを知るにはどうすればよいですか?

順番は忘れてください!ポジションがある!

私は特に、「ORDER、TAKE、POSITIONのうち、どれが欲しいのか?用語を混同しないこと。取引注文が 実行された後、ORDERではなくPOSITIONが表示される!


そのため、まず自分が何をしているのか、何を得たいのかを言葉で説明します。ORDERの代わりに、「買付取引注文」「売付取引注文」を使用します。この結果、「買い」または「売り」のポジションが発生します。

 
Igor Makanu:

しかし、CTradeを使用する際に別の問題が発生しました。それは、記憶された注文チケットがあり、PositionClose(m_ticket)を使用してそれを閉じることができます。

MQL4では、注文がクローズされているかどうかを調べるのはとても簡単でした。 OrderSelect()を使って選択し、if(OrderCloseTime()>0) - close timeが0でなければ、注文はクローズされていることをチェックしました。

SB CTrade を使用して注文が終了したかどうかを知るにはどうすればよいですか?

ポジション・チケットは通常 オーダー・チケットに対応しますが、絶対に対応するとは限らないことはさておき、PositionSelectByTicket関数は、SB

Документация по MQL5: Торговые функции / PositionSelectByTicket
Документация по MQL5: Торговые функции / PositionSelectByTicket
  • www.mql5.com
Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Функция PositionSelectByTicket() копирует данные о позиции в программное окружение, и...
 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

このインジケーターの計算 コードに独自の計算 式を代入することはできますか?

例えば、open/2

理由: