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

 
macleta:
ありがとうございます!nddってなん ですか?

ついていけなかった、全部入れ替えなかった。マクロなんです。

#define  ndd(A) NormalizeDouble(A, _Digits)
 
Alexey Viktorov:

記録を取らず、すべてを交換しなかった。マクロなんです。

ありがとうございます(苦笑)。
 
最後のオープンポジションを マジックナンバーで知る方法を教えてください。多分、最後のオープンポジションのロット値を返す関数があるのでしょうか?mql5で必要です。
 
astrologer Аполонов:
マジックナンバーで最後のオープンポジションを 見つける方法を教えてください。もしかしたら、最後のオープンポジションのロット値を返す関数があるかもしれません。mql5で必要です。

いくつかの方法がありますので、明確にしてください:取引口座のタイプはヘッジまたはネッティング、その場合は、ポジションについて知る必要があります:アドバイザーは、ポジションを開き、彼は最後のオープンポジションのパラメータを知る必要がありますか?

 
astrologer Аполонов:
マジックナンバーで最後のオープンポジションを 知る方法を教えてください。多分、最後のオープンポジションのロット値を返す関数があるのでしょうか?mql5で必要です。

例1.

//+------------------------------------------------------------------+
//|                                             Trading engine 3.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
/*
   barabashkakvn Trading engine 3.042
*/
#include <Trade\SymbolInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//---
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            if(deal_entry==DEAL_ENTRY_IN)
              {
               Print("Last DEAL IN volume: ",DoubleToString(deal_volume,2));
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

OnTradeTransaction では、次のようなタイプのトランザクションをキャッチします。

貿易取引取引追加

トランザクションを履歴に追加します。注文の執行や口座残高の取引の結果として行われます。

   if(type==TRADE_TRANSACTION_DEAL_ADD)


私たちのシンボルであり、私たちのマジックであることを確認してください。

      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)


BUYまたはSELLの案件を 探す。

         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)


を確認し、この取引は

DEAL_ENTRY_IN。

市場参入

            if(deal_entry==DEAL_ENTRY_IN)
ファイル:
Test.mq5  10 kb
 
astrologer Аполонов:
マジックナンバーで最後に開いたポジションを 調べる方法を教えてください。もしかしたら、最後に開いたポジションのロット値を返す関数があるのでしょうか?mql5で必要です。

オプション2 - アイテムリストを回避する。

//+------------------------------------------------------------------+
//|                                             Trading engine 3.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
/*
   barabashkakvn Trading engine 3.042
*/
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//---
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   ulong    last_time   = 0;
   double   last_volume = 0.0;

   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            if(m_position.TimeMsc()>last_time)
              {
               last_time=m_position.TimeMsc();
               last_volume=m_position.Volume();
              }
           }
   if(last_volume>0.0)
      Print("Last POSITIONS volume: ",DoubleToString(last_volume,2));
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {

//---
  }
//+------------------------------------------------------------------+


ポジションのリストに目を通す

   for(int i=PositionsTotal()-1; i>=0; i--)


ミリ秒単位で最長ポジションのオープンタイムを探す

TimeMsc

ポジションをオープン した時間を1970年1月1日からのミリ秒単位で取得 します。

            if(m_position.TimeMsc()>last_time)
              {
               last_time=m_position.TimeMsc();
               last_volume=m_position.Volume();
              }


check - ボリュームが "0.0 "より大きい場合 - ポジションが検出されたことになります。

   if(last_volume>0.0)
      Print("Last POSITIONS volume: ",DoubleToString(last_volume,2));
ファイル:
Test.mq5  6 kb
 
Alexey Viktorov:

ロスサイズについては、以下のような機能です。

SLをTPに置き換えるだけ

どうやら利用可能な資金の割合として二重のリスクがあるようだ。1.5など、具体的な利益額をお金で設定するにはどうしたらいいですか?
double RiskLots(double risk, int TP)
{
  double RiskMony, Lot;
  double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
  double margin = SymbolInfoDouble(_Symbol, SYMBOL_MARGIN_INITIAL);
  double FreeMargin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
    long accountLeverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
    RiskMony = floor(FreeMargin*risk/100);
     Lot = NormalizeDouble(RiskMony*_Point/NormalizeDouble(TP*_Point*tickValue, _Digits), 2);
     //
  return(Lot);
}
 
Благодарю Vladimir Karputov:

例1.

OnTradeTransaction では、次のようなタイプのトランザクションをキャッチします。

貿易取引取引追加

トランザクションを履歴に追加します。注文の執行や口座残高の取引の結果として行われます。


私たちのシンボルであり、私たちのマジックであることを確認してください。


は、それが買いか売りかを見て ください。


を確認し、この取引は

DEAL_ENTRY_IN。

しじょうにゅうりょく

 
macleta:
どうやら、利用可能な資金に占めるリスクの割合が2倍になっているようです。1.5など、具体的な利益額をお金で設定するにはどうしたらいいですか?

さて、そのセリフはこうだ。

    RiskMony = floor(FreeMargin*risk/100);
計算式の代わりに数字を入れるだけで、 ...
 

どのように変換するには、マウスの位置が、中に、投げることなく?

ChartTimeOnDropped
理由: