エキスパート: Hedge any positions - ページ 2

削除済み  

こんにちは

私はMQL5プログラミングについて 勉強を続けており、そのコードはインスピレーションと研究のベースとして役立っています。

ヘッジ・エニー・ポジション」のコード全体は理解できたのですが、それが何をするものなのか、なぜそこにあるのかを理解するのが難しい部分があります。

bool RefreshRates(const string symbol,
                  const ulong magic,
                  double freeze_level,
                  double stop_level)
{
   if(!m_symbol.Name(symbol))
   {
      return(false);
   }

   m_trade.SetExpertMagicNumber(magic);
   m_trade.SetDeviationInPoints(0);
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetMarginMode();

   if(!m_symbol.RefreshRates())
   {
      Print("RefreshRates error");
      return(false);
   }

   if(!m_symbol.Refresh())
   {
      Print("Refres error");
      return(false);
   }
   
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
   {
      return(false);
   }

   freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
   {
      freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   freeze_level*=1.1;

   stop_level=m_symbol.StopsLevel()*m_symbol.Point();
   if(stop_level==0.0)
   {
      stop_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   stop_level*=1.1;

   if(freeze_level<=0.0 || stop_level<=0.0)
   {
      return(false);
   }
   return(true);
}
 
rmca :

こんにちは

私はMQL5プログラミングについて勉強を続けていて、そのコードはインスピレーションや勉強のベースとして役立っています。

ヘッジ・エニー・ポジション」のコード全体は理解できたのですが、それが何をするものなのか、なぜそこにあるのかを理解するのが難しい部分があります。

具体的に何がわからないのでしょうか?

削除済み  
Vladimir Karputov:

何が明確でないのか?

freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
   {
      freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   freeze_level*=1.1;

   stop_level=m_symbol.StopsLevel()*m_symbol.Point();
   if(stop_level==0.0)
   {
      stop_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   }
   stop_level*=1.1;

   if(freeze_level<=0.0 || stop_level<=0.0)
   {
      return(false);
   }
   return(true);
}

freeze_level "と "stop_level "がチェックさ れる理由がわからなかったのですが、なぜ "0 "を返した場合に(Ask-Bid)*3の計算が発生するのでしょうか?また、"0 "を返さない場合は、1.1倍するのでしょうか?

freeze_level」と「stop_level」は何ですか?

ドキュメントを見たのですが、その目的や、なぜ "0 "が戻ってきた場合とそうでない場合にこのチェックと乗算が行われるのかがよくわかりませんでした。

 
rmca :

なぜ "freeze_level "と "stop_level "がチェックされるのか理解できなかった。

なぜチェックするのか:取引ロボットがマーケットに公開する前に通過しなければならないチェックを お読みください。


rmca:

***なぜ "0 "を返した場合、(Ask-Bid) * 3の計算が発生するのですか?***

初歩的な保護:「0」は浮動レベルを意味することがあります。このような場合、「3」を掛けるのが通例です。


私の新しいExpert Advisorは修正されたアプローチを使用しています:

***
input group             "Additional features"
***
input uchar    InpFreezeCoefficient = 1;           // 係数(Freeze=0 または StopsLevels==0 の場合)
***
//+------------------------------------------------------------------+
//| フリーズとストップのレベルチェック|
//+------------------------------------------------------------------+
void FreezeStopsLevels(double &freeze,double &stops)
  {
//--- フリーズとストップのレベルをチェック
   
 /*
 SYMBOL_TRADE_FREEZE_LEVEL 保留中の注文および未決済ポジションの取引操作の凍結距離をポイントで表示
 ------------------------|-----------------------|-----------------------
 注文・ポジションの種類|発動価格|チェック
 ------------------------|-----------------------|-----------------------
 買い指値注文| アスク|アスク建値>= SYMBOL_TRADE_FREEZE_LEVEL
 逆指値買い注文買指値注文= SYMBOL_TRADE_FREEZE_LEVEL
 売り指値注文|買値-売値 >= SYMBOL_TRADE_FREEZE_LEVEL| 売り指値注文|OpenPrice-Bid >= SYMBOL_TRADE_FREEZE_LEVEL
 逆指値売り注文| 買建値 >= SYMBOL_TRADE_FREEZE_LEVEL
 買いポジション| 買いポジション| テイクプロフィット-ビッド >= SYMBOL_TRADE_FREEZE_LEVEL
 || 買いポジション|ストップロス|Bid-StopLoss >= SYMBOL_TRADE_FREEZE_LEVEL
 売りポジション|アスク| 売りポジション|Ask-TakeProfit >= SYMBOL_TRADE_FREEZE_LEVEL
 || StopLoss-Ask >= SYMBOL_TRADE_FREEZE_LEVEL
 ------------------------------------------------------------------------------------------

 SYMBOL_TRADE_STOPS_LEVEL は、オープンポジションの現在の終値から
 StopLoss と TakeProfit レベルの最小インデントポイント数を決定します

 ------------------------------------------------|------------------------------------------
 買いは売値で行われます。------------------------------------------------|------------------------------------------
 TakeProfit>= 買値| テイクプロフィット <= アスク
 ストップロス<= ビッド| StopLoss >= Ask
 TakeProfit - Bid >= SYMBOL_TRADE_STOPS_LEVEL | Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
 Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL | StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL
 ------------------------------------------------------------------------------------------
 */
   double coeff=(double)InpFreezeCoefficient;
   if(!RefreshRates() || !m_symbol.Refresh())
      return;
//--- FreezeLevel -> 保留オーダーと変更用
   double freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
      if(InpFreezeCoefficient>0)
         freeze_level=(m_symbol.Ask()-m_symbol.Bid())*coeff;
//--- ストップ・レベル -> テイクプロフィットおよびストップ・ロス用
   double stop_level=m_symbol.StopsLevel()*m_symbol.Point();
   if(stop_level==0.0)
      if(InpFreezeCoefficient>0)
         stop_level=(m_symbol.Ask()-m_symbol.Bid())*coeff;
//---
   freeze=freeze_level;
   stops=stop_level;
//---
   return;
  }
The checks a trading robot must pass before publication in the Market
The checks a trading robot must pass before publication in the Market
  • www.mql5.com
Before any product is published in the Market, it must undergo compulsory preliminary checks, as a small error in the expert or indicator logic can cause losses on the trading account. That is why we have developed a series of basic checks to ensure the required quality level of the Market products. If any errors are identified by the Market...
削除済み  
Vladimir Karputov:

なぜチェックするのか:取引ロボットがマーケットで公開される前に通過しなければならないチェックを 読む


初歩的な保護:「0」は浮動レベルを意味することがある。このような場合、'3'を掛けるのが通例である。


私の新しいExpert Advisorは、修正されたアプローチを使用しています:

ご返信ありがとうございます。お送りいただいたドキュメントをすべて読み、コードに変更を加えました:

bool RefreshRates(const string symb,
                  const ulong magi)
{
   if((!m_symbol.Name(symb))
   && (!m_symbol.RefreshRates() || !m_symbol.Refresh())
   && (m_symbol.Ask()==0 || m_symbol.Bid()==0))
   {
      return(false);
   }
   m_trade.SetExpertMagicNumber(magi);
   m_trade.SetDeviationInPoints(0);
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetMarginMode();
   return(true);
}

これは、トレードの相場と設定を更新する(更新をチェックする)ための良いアプローチだと思いますか?

 
rmca :

ご返信ありがとうございます。送っていただいたドキュメントをすべて読み、コードを少し変更しました:

これは、トレードの相場とコンフィギュレーションを更新(および更新のチェック)するための良いアプローチだと思いますか?

これがその行です:

   m_trade.SetDeviationInPoints(0);
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetMarginMode();

OnInitに登録する必要があります。



あなたはゼロスリッページを設定している - あなたは非常に頻繁に拒否を受信するという事実を覚悟してください。

 
このEAをチャート 上でアクティブにしておくだけで、別のチャート上の別のEAのポジションをモニターして「保護」してくれる、そういうことですか?
 
一つ質問ですが、ロット係数が1より小さい場合、例えば0.5の場合はどうなるのでしょうか?
 
Eduardo Alvarado :
一つ質問ですが、ロット係数が1より小さい場合、例えば0.5の場合はどうなりますか?

より小さなボリュームのポジションがオープンされます。

 
このEAをアップグレードして、注文をフィルタリングし、特定のマジックナンバーによってのみ ヘッジを適用することは可能ですか?