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

 
Vladimir Karputov:
簡単なアドバイザーで確認してみましょう・・・。
確認する必要はありません。ロジックはMQL4と同じで、Profit、Commission、Swapはそれぞれ別個の存在です。
 
fxsaber:
確認する必要はありません。ロジックはMQL4と同じで、Profit、Commission、Swapはそれぞれ別個の存在です。
mql5での直接のコードで、できれば変質していないものを見せてください。
 
Vladimir Karputov:
では、簡単なEAで確認してみましょう・・・。

ウラジミール、要は4で私はこうしているんです。

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

5人でどうやるの?

 
Vitaly Muzichenko:

ウラジミール、要は4で私はこうしているんです。

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

5人でどうやるの?

冒頭に追加します。
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
全体を大きく書き換えるかのどちらか。
 
Vitaly Muzichenko:
コードで示してください、ここにmql5での直接のコードがあります、できれば曲解のない ものをお願いします。
これはほとんど不可能です!SBから引っ張ってきた、ダイレクトなコード
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
double CPositionInfo::Profit(void) const
  {
   return(PositionGetDouble(POSITION_PROFIT));
  }
 
fxsaber:
ほとんど不可能です!SBからピックアップ、ダイレクトコード
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
ドキュメントに書き忘れましたが、この「POSITION_COMMISSION」は効果があるのでしょうか?
 
new-rena:
ドキュメントに書き忘れましたが、この「POSITION_COMMISSION」は機能するのでしょうか?
曲解しないで欲しいということですね。そして、もし彼らと一緒なら

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2016.07.19 12:40

テスター(RoboForexEU-MetaTrader 5)のPOSITION_COMMISSION プロパティは、常にゼロコミッションを返します。

//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }

また、POSITION_COMMISSION (== 8) は、ヘルプやメタエディタ(ハイライト)では欠落していますが、コンパイラではおなじみです。ポジション・コミッションは、別の(作業)方法で決定することも難しくありません。POSITION_COMMISSION プロパティ - 初歩的なこと?


だから、こうなんです
double GetPositionCommission( void )
{
  double Commission = ::PositionGetDouble(POSITION_COMMISSION);

  // На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
  {
    const ulong Ticket = MT4ORDERS::GetPositionDealIn();

    if (Ticket > 0)
    {
      const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);

      if (LotsIn > 0)
        Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
    }
  }

  return(Commission);
}
または

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

初心者の方からの質問

fxsaber さん 2016.10.29 16:23

MT4Ordersのライブラリを課していない。でも、もしかしたら、古き良きOrderCommissionを 呼び出すだけの方が簡単かも?

ヘッジ会計だけでなく、ネット会計でもまだ使えます。

 
Vladimir Karputov:
では、簡単なExpert Advisorで確認してみましょう...。

ここで、POSITION_PROFITは、ポジションの利益を示します。

ポジションプロフィット

.スワップなどは考慮していない。

 
Vitaly Muzichenko:

ウラジミール、要は4で私はこうしているんです。

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

5でどうやるんだ?

手数料は、クローズド・トレードでなければ決定できないほど予測不可能なものです。未決済ポジション の場合、現在の利益(スワップの影響も手数料の影響も考慮されていない)とスワップしかわかりません。以下はそのコードです。

m_trade.PositionClose(Symbol();" の行にブレークポイントを設定し、ヒストリでテストを実行します。テスターがブレークポイントで停止したら、ProfitとSwapの欄の数値をテスターログに書かれていない数値と比較する。

ファイル:
3.mq5  5 kb
 
Vladimir Karputov:

ここで、POSITION_PROFITは、ポジションの利益を示します。

.スワップなどは考慮していない。

オッケーです。手に入れました。

fxsaberの ソリューションは良いですね、私も適用しました。

基本的には、MQL4のプログラムをほぼ問題なくMQL5に移行できました。

詳細は前述したとおりです。

ありがとうございました。

理由: