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

 
Vitaly Muzichenko:

すべての人に。より正確には、設定で指定された本数のバーを チャートウィンドウに表示し、タイムフレームには依存しない

追伸:この値を変更したことはありませんが、今確認したところ、1000より小さく設定することはできないようです。

iBars() で確認する必要があるのですね。

 

こんにちは。スクリプトがなぜか動作しない。

何が問題なのか?


//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   
   if(!ChartSetInteger(0,CHART_IS_MAXIMIZED,true))
     {
      //--- выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      //return(false);
     };


  }
//+------------------------------------------------------------------+
 
このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。
 

ハローフレンド

質問です。

1.売りの逆指値 注文は、ブローカー側と端末側のどちらに発注するのですか?

2.プログラムを閉じたとき、この注文は条件を満たしたときに発生するのでしょうか?

MICEX株式 市場で取引。ありがとうございました。

Акции: новости и аналитика фондовых рынков - Блоги трейдеров и аналитика финансовых рынков
Акции: новости и аналитика фондовых рынков - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Акция — это ценная бумага, которая выпускается каким-либо предприятием (акционерным обществом) и дает ее владельцу права на получение части прибыли от этого предприятия в виде дивидендов. Также
 

プログラマーの皆さん、こんにちは。MQL5に関する質問

MetaTrader5でポジション制御を実装する方法は?私は1つのバーに1つのオープンポジションを 持ちたいのです。つまり、ポジションはどこのバーであろうとクローズされるべきですが、オープンは1つのバーだけであるべきなのです。

このコードは完全に無視されます。 どのようなエラーなのでしょうか?

if (OrderSelect(HistoryDealsTotal()-1))

{
datetime Cu=PositionsTotal();
int hd=iBarShift(Symbol(),_Period,Cu);
if (hd<=1)
{
return;
}
}



Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov:

プログラマーの皆さん、こんにちは。MQL5に関する質問

MetaTrader5でポジション制御を実装する方法は?つまり、1つのバーには1つのオープンポジションしか ありません。 どのバーでポジションを閉じてもいいのですが、オープンは1つのバーだけであるべきということです。

最も簡単な方法は、ポジションをオープンしたバーの開始時刻をグローバル変数に保存し、新しいポジションをオープンする際に、バーの開始時刻をチェックして、その値が保存した値より高ければ、ポジションをオープンすることです。

 
Alexey Belyakov:

プログラマーの皆さん、こんにちは。MQL5に関する質問

MetaTrader5でポジション制御を実装する方法は?私は1つのバーに1つのオープンポジションを 持ちたいのです。つまり、ポジションはどこのバーであろうとクローズされるべきですが、オープンは1つのバーだけであるべきなのです。

このコードは完全に無視されます。 どのようなエラーなのでしょうか?



Error: You've mixed up flies and cutlets - You've mixed up REMOTE ORDERS and POSITIONS.

混乱を避けるため、参考:一般原則を お読みください。


上記の簡単な方法は、ポジションを建てるときに、現在のバーのオープン時間を記憶しておくことです。そして、新しいポジションを開く場合は、保存された時間と現在のバーのオープンタイムを確認します。

ポジションを開いた時刻を保存しておくと、OnTradeTransactionで 便利です。

//+------------------------------------------------------------------+
//| 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)
     {
      if(HistoryDealSelect(trans.deal))
         m_deal.Ticket(trans.deal);
      else
         return;
      if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
           {
            if(m_deal.Entry()==DEAL_ENTRY_IN || m_deal.Entry()==DEAL_ENTRY_INOUT)
               m_last_deal_in=iTime(m_symbol.Name(),InpTimeFrame,0);
            int size_need_position=ArraySize(SPosition);
            if(size_need_position>0)
              {
               for(int i=0; i<size_need_position; i++)
                 {
                  if(SPosition[i].waiting_transaction)
                     if(SPosition[i].waiting_order_ticket==m_deal.Order())
                       {
                        Print(__FUNCTION__," Transaction confirmed");
                        SPosition[i].transaction_confirmed=true;
                        break;
                       }
                 }
              }
           }
        }
     }
  }

と、信号が発生した時刻を照合 する。

//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   if(m_prev_bars==m_last_deal_in) // on one bar - only one deal
      return(true);


OHLC チェック 2 コードからの抜粋例

Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
 

ちょっと引っかかるんですよね......なんとなく。最初の段階では問題なし"現在のバーの開店 時間を覚えておく" 。

これでよしとする。

if (PositionsTotal()==1)  // Здесь проверяю, что открыта одна позиция
{
datetime Cu=iTime(NULL,_Period,0);        // Здесь в переменную - время открытия бара при открытой позиции

しかし、ここで「保存された時間と現在のバーの開始時間を調整する」問題が 発生します。

私もほぼ同じことをしました。 これを見てください。

if (PositionsTotal()==1)  // Здесь проверяю, что открыта одна позиция (или была открыта, неважно, любое торговое действие)
{
datetime Cu=iTime(NULL,_Period,0);        // Здесь в переменную - время открытия бара при открытой позиции
int hd=+iBarShift(Symbol(),_Period,Cu)+1;    // Здесь в переменную - бар на котором произошло открытие позиции 
if (hd>=1)                                //Здесь проверяем - если этих баров, больше чем один, то.......   
{
return; //....то зацикливанием программу, НО проблема только в return
}
}

ここで必要な のは、「return(-1)」のようなループ 歩きなのですが、voidのためreturnに式を代入できません。 これを回避するにはどうしたらいいでしょうか?ループさせるが、戻さない方法は?

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
datetime PR=iTime(NULL,_Period,0);  // проверяю время открытие бара
if (PositionsTotal()==1)  
{
datetime TK=iTime(NULL,_Period,0);  // время открытия бара при открытой позиции                        
if (PR==TK)                         // сравниваю
{
return(true);  // НЕ катит true - ошибка 
}
}


それもうまくいかなかった。

 
Alexey Belyakov:

ちょっと引っかかるんですよね......なんとなく。最初の段階では問題なし"現在のバーの開店 時間を覚えておく" 。

これでよしとする。

しかし、ここでは「保存された時刻と現在のバーの開店時刻を確認する」という問題が あります。

私もほぼ同じことをしました。 これを見てください。

ここで必要な のは、「return(-1)」のようなループ 歩きなのですが、voidのためreturnに式を代入できません。 これを回避するにはどうしたらいいでしょうか?ループさせるが、戻さない方法は?

ルーピングプログラムの治療は、首に巻いた腕を切ることです。今後、同じことを繰り返さないために。


ここに必要なものがあります。プログラム本体全体、信号の受信を形式化するだけでいいのです。

//+------------------------------------------------------------------+
//|                              Example One position on one bar.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\DealInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
CTrade         m_trade;                      // object of CTrade class
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
CDealInfo      m_deal;                       // object of CDealInfo class
//--- input parameters
input ulong    InpMagic             = 200;      // Magic number
//---
datetime m_prev_bars                = 0;        // "0" -> D'1970.01.01 00:00';
datetime m_last_deal_in             = 0;        // "0" -> D'1970.01.01 00:00';
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- we work only at the time of the birth of new bar
   datetime time_0=iTime(m_symbol.Name(),Period(),0);
   if(time_0==m_prev_bars)
      return;
   m_prev_bars=time_0;
   if(!RefreshRates())
     {
      m_prev_bars=0;
      return;
     }
//--- search for trading signals
   if(!SearchTradingSignals())
     {
      m_prev_bars=0;
      return;
     }
  }
//+------------------------------------------------------------------+
//| 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)
     {
      if(HistoryDealSelect(trans.deal))
         m_deal.Ticket(trans.deal);
      else
         return;
      if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
           {
            if(m_deal.Entry()==DEAL_ENTRY_IN || m_deal.Entry()==DEAL_ENTRY_INOUT)
               m_last_deal_in=iTime(m_symbol.Name(),Period(),0);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   if(m_prev_bars==m_last_deal_in) // on one bar - only one deal
      return(true);
//--- signal
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0");
      return(false);
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+


変数'm_prev_bars' には現在のバーのオープンタイムが、変数'm_last_deal_in' にはポジションがオープンされたバーのオープンタイムが格納されています。

この2つの変数は、シグナルを取得するためのブロック「SearchTradingSignals」で比較されます。

理由: