初心者の方からの質問 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:

このスクリプトは、期間中の利益、合計ロット、各商品の 手数料を表示します。
礼を言わないでください。

スクリプトはOKですが、オープンポジションのコムサが必要で、これはヒストリーにあります。

 
Aleksandr Egorov:

脚本はいいのですが、オープンポーズにコムサが必要ということで、これはストーリーの中に入っています。

すでに以前から議論されていることです。手数料(ブローカーが申告したもの)は、ブローカーの取引条件で確認できます。そして、注文(オーダー)の執行にかかる本当の手数料は、注文の執行後にしかわからず、執行前にはわからないのです。

ZS. 次のティックのスプレッドと同じです。現在のティックでは、次のティックがどうなるかは分からない。価格も、スプレッドも、スワップも、手数料も分からない。そして、ブローカーはそれらを変更する権利を持っています。

 
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. 次のティックのスプレッドと同じです。現在のティックでは、次のティックがどうなるかは分からない。価格も、スプレッドも、スワップも、手数料も分からない。そして、ブローカーはそれらを変更する権利を持っています。

だから、彼は自分のオープンポジションについて知る必要があるのです。

理由: