初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1327

 
SanAlex:

所有相同的零,不想显示佣金

double Komsa(string Pair) {
   double  commicion=0;
   int tikett,entry;
   ulong tik,ord;
//---------------------------------------------------------------   
   for(int i=PositionsTotal()-1;i>=0;i--) {
   if(PositionGetSymbol(i)==Pair){  tik=PositionGetTicket(i); 
//---------------------------------------------------------------         
   HistorySelect(0,TimeCurrent());
   for(uint r=HistoryDealsTotal()-1;r>0;r--)   {
   if((tikett=HistoryDealGetTicket(r))>0)   {
   ord=HistoryDealGetInteger(tikett,DEAL_ORDER);
   entry =HistoryDealGetInteger(tikett,DEAL_ENTRY);
   if(entry==DEAL_ENTRY_IN) {
   if(tik==ord)  { commicion+=HistoryDealGetDouble(tikett,DEAL_COMMISSION)*2;    }  }  } }  } }
//--------------------------------------------------------------  
  Comment( " commisia "+commicion);
   return(commicion);  }

我不知道它是对还是错,但我检查了一下,它显示正确。

 
Aleksandr Egorov:

总之,在选定的一对上就是这样计算的

谢谢你!- 我现在就去试试,毕竟我需要搞清楚这个功能。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

是的!它正在工作。谢谢你!

Fx10 4

 
SanAlex:

谢谢你!- 我现在要去试试,毕竟我得弄清楚这个功能

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

是的!它显示了。谢谢你!


事实证明,如果只计算一方的佣金,那么函数将不能正确工作,因为它被乘以2。

DEAL_ENTRY_IN
我们需要以某种方式完善它
 
Aleksandr Egorov:

事实证明,如果只计算一方的佣金,那么函数将不能正确工作,因为它被乘以2。

我需要把它修得完美无缺

它似乎能正确显示一切

我做了一些调整--我不知道这是否正确,但警告已经消失了

//+------------------------------------------------------------------+
//|                                                   Commission.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Komsa(_Symbol);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Komsa(string Pair)
  {
   double  commicion=0;
   ulong tikett,entry;
   ulong tik,ord;
//---------------------------------------------------------------
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionGetSymbol(i)==Pair)
        {
         tik=PositionGetTicket(i);
         //---------------------------------------------------------------
         HistorySelect(0,TimeCurrent());
         for(uint r=HistoryDealsTotal()-1; r>0; r--)
           {
            if((tikett=HistoryDealGetTicket(r))>0)
              {
               ord=HistoryDealGetInteger(tikett,DEAL_ORDER);
               entry =HistoryDealGetInteger(tikett,DEAL_ENTRY);
               if(entry==DEAL_ENTRY_IN)
                 {
                  if(tik==ord)
                    {
                     commicion+=HistoryDealGetDouble(tikett,DEAL_COMMISSION);
                    }
                 }
              }
           }
        }
     }
//--------------------------------------------------------------
   Comment(" commisia "+DoubleToString(commicion,2));
   return(commicion);
  }
//+------------------------------------------------------------------+

Fx10 5

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

我开了一个相反的头寸,佣金也增加了--似乎是正确的

BTCUSDH1

 
SanAlex:

它似乎能准确地显示一切。

我对它进行了一些调整--我不知道它是否正确,但警告已经消失。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

我开了一个相反的头寸,佣金也增加了--看来是正确的。


有必要检查一下,如果你用1手开仓,然后用0.5手平仓,是计算进场和出场,还是只计算进场和撤回部分仓位。

我有很多工作要做。
 

这个脚本显示了每个工具的 本期利润、总手数和佣金。
不,谢谢。

附加的文件:
 
Dmitiry Ananiev:

这个脚本显示了每个工具的 本期利润、总手数和佣金。
不要感谢我。

脚本是好的,但问题是你需要一个关于未结头寸的comsa,而这是在历史中。

 
Aleksandr Egorov:

剧本很好,但问题是你需要一个开放姿势的comsa,这在故事中。

以前已经讨论过这个问题了。你可以在经纪人的交易条件中看到佣金(由经纪人申报)。而执行订单(order)的真正佣金,你只能在执行订单之后才能知道,在执行之前是无法知道的。

ZS.它就像下一个tick上的价差。在当前的刻度中,我们不知道下一个刻度会是什么,既不知道价格,也不知道点差,也不知道掉期,更不知道佣金。而且经纪人有权改变它们。

 
Aleksandr Egorov:

我需要检查,如果我以1手开仓,然后以0.5手平仓,是算入仓和出仓,还是只算入仓和扣除部分仓位。

我还得乱来。

在研究 一些有趣的 东西--我自己还不明白。 我在开仓时和平仓时分别检查。

明智的

//+------------------------------------------------------------------+
//|                                                   Commission.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade trade;
#property script_show_inputs
//---
input bool Inp_open_close = false; // Open --> false || Close --> true
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(void)
  {
//---
   if(!Inp_open_close)
     {
      if(!trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,0.1,SYMBOL_ASK,0.0,0.0))
         Print(trade.ResultRetcode());
      PlaySound("ok.wav");
      CSV_OPEN();
     }
   if(Inp_open_close)
     {
      if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         trade.PositionClose(_Symbol,3);
      PlaySound("ok.wav");
      CSV_CLOS();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Komsa(void)
  {
   double  commicion=0;
   ulong tikett,entry;
   ulong tik,ord;
//---------------------------------------------------------------
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionGetSymbol(i)==_Symbol)
        {
         tik=PositionGetTicket(i);
         //---------------------------------------------------------------
         HistorySelect(0,TimeCurrent());
         for(uint r=HistoryDealsTotal()-1; r>0; r--)
           {
            if((tikett=HistoryDealGetTicket(r))>0)
              {
               ord=HistoryDealGetInteger(tikett,DEAL_ORDER);
               entry =HistoryDealGetInteger(tikett,DEAL_ENTRY);
               if(entry==DEAL_ENTRY_IN)
                 {
                  if(tik==ord)
                    {
                     commicion+=HistoryDealGetDouble(tikett,DEAL_COMMISSION);
                    }
                 }
              }
           }
        }
     }
//--------------------------------------------------------------
   Comment(" commisia "+DoubleToString(commicion,2));
   return(commicion);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CSV_OPEN(void)
  {
//---
   ResetLastError();
   int filehandle=FileOpen("CommissionOpen.csv",FILE_READ|FILE_WRITE|FILE_CSV);
   if(filehandle==-1)
     {
      int res=GetLastError();
      Print("File open error :  ",
            res);
      return;
     }
   FileSeek(filehandle, 0, SEEK_END);
   FileWrite(filehandle,Komsa());
   FileClose(filehandle);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CSV_CLOS(void)
  {
//---
   ResetLastError();
   int filehandle=FileOpen("CommissionClose.csv",FILE_READ|FILE_WRITE|FILE_CSV);
   if(filehandle==-1)
     {
      int res=GetLastError();
      Print("File open error :  ",
            res);
      return;
     }
   FileSeek(filehandle, 0, SEEK_END);
   FileWrite(filehandle,Komsa());
   FileClose(filehandle);
  }
//+------------------------------------------------------------------+
 
Valeriy Yastremskiy:

以前已经讨论过这个问题了。你可以在经纪人的交易条件中看到佣金(由经纪人申报)。而订单(指令)执行的真正佣金,你只能在订单执行后才能知道,在执行前你是无法知道的。

ZS.它就像下一个tick上的价差。在当前的刻度中,我们不知道下一个刻度会是什么,既不知道价格,也不知道点差,也不知道掉期,更不知道佣金。而且经纪人有权改变它们。

所以他需要知道他的空缺职位。

关于交易、自动交易系统和策略测试器的论坛

初学者的问题 MQL5 MT5 MetaTrader 5

Aleksandr Egorov, 2021.07.14 22:30

我有一个很好的想法,就是 这个剧本来做什么。