エキスパート: New Martin

 

New Martin:

New Martinエキスパートアドバイザーは起動時に2つの反対方向のポジションを開きます。OnTradeTransaction処理。決済指値がトリガされると、同じ方向のポジション(1つ)が開かれます。2つのMA指標の交差は、より大きなロットのポジションを開くためのシグナルです。

New Martinの交差

作者: Vladimir Karputov

 

バージョン1.105: OpenBuyとOpenSellの分離関数を導入。

//+------------------------------------------------------------------+
| シンボル別買い始値|
//+------------------------------------------------------------------+
bool OpenBuy(const double lot)
  {
   bool res=false;

   double price=m_symbol.Ask();
   double tp=m_symbol.NormalizePrice(m_symbol.Bid()+InpTP*m_adjusted_point);
   if(m_trade.Buy(lot,m_symbol.Name(),price,0.0,tp))
      if(m_trade.ResultDeal()>0)
         res=true;

   return(res);
  }
//+------------------------------------------------------------------+
//| シンボルで売りポジションを建てる|
//+------------------------------------------------------------------+
bool OpenSell(const double lot)
  {
   bool res=false;

   double price=m_symbol.Bid();
   double tp=m_symbol.NormalizePrice(m_symbol.Ask()-InpTP*m_adjusted_point);
   if(m_trade.Sell(lot,m_symbol.Name(),price,0.0,tp))
      if(m_trade.ResultDeal()>0)
         res=true;

   return(res);
  }
 

いつものように問題は、ぶら下がったままになっている不採算ポジションをどうするかということだ。以下はバージョン1.105の例です:

1.105

OnTradeTransaction(TakeProfitポジションのクローズが検出されたとき)において、最も収益性の低いポジションを検索し、この最も収益性の低いポジションをクローズします:

1.105で小さな変更が1つあります。

シングル・テストは「Every Tick Based on Real Tick」モードのみで行われたことを思い出してください。

両バリアントとも10000からスタート。どちらのバリアントを選択するか - それはあなたの特定の目標に依存すると思います。

 
少なくとも1つのポジションがトリップを受けた場合、すべてのポジションをクローズするオプションがあります。
 
trader781:
少なくとも1つのポジションがTPを受信した場合、すべてのポジションをクローズするオプションがあります。

この場合、次のようになります:

最初に2つの多方向のポジションを持ち、そのうちの1つがTakeProfitを取得した後、すべてのポジションを決済します(つまり、残りのポジション(不採算のポジション)を決済します)。その結果、TakeProfitで利益を得ると同時に、2つ目のポジションで損失を出すことになります。

これはあまり良いことではありません。

 
Vladimir Karputov:

この場合、次のようになる:

最初に2つの多方向ポジションを持ち、1つはTakeProfitを取得し、それらすべてを決済する(つまり、残りの1つ(利益のない方)を決済する)。その結果、TakeProfitで利益を得ると同時に、2つ目のポジションで損失を出す。

これはあまりよくない。

私はこのうちの1つを持っていますが、マーチンは最低2つ+成功したエントリーでなければなりません。

主な問題は、成功したエントリーの合計が失敗したエントリーの合計の半分以上になるようなエントリーを見つけることです。

クロスでなければ、0.01から8ニーで十分である。

理論

1) 0.01の注文を2つ、シグナルに従って異なる方向に出す。

2) 価格が利益までの必要な距離を通過した場合、テイクを伴うリフィル、リフィルの数、ニーとテイクのステップ - あなたは長い間これで遊ぶことができます。

 

私は2番目のオプション(...)を残すことに決めました。OnTradeTransaction (TakeProfitによるポジションのクローズが検出された場合)で、最も収益性の低いポジションを検索し、この最も収益性の低いポジションをクローズします:)

取引、自動取引システムとテスト取引戦略に関するフォーラム

エキスパートアドバイザー:新しいマーティン

ウラジーミルKarputov、2017.01.22 19:00

いつものように問題 - ぶら下がった不採算ポジションをどうするか?以下はバージョン1.105の例です:

1.105

OnTradeTransaction(TakeProfitポジションのクローズが検出されたとき)で、最も収益性の低いポジションを検索し、この最も収益性の低いポジションをクローズします:

1.105で小さな変更が1つあります。

シングルテストは「Every Tick Based on Real Tick」モードでのみ実施されていることをお伝えしておきます。

両バリアントとも10000からスタート。どちらのバリアントを選択するか - 私はそれがあなたの特定の目標に依存すると思います。


現在バージョン1.106

 
ニューマーチンアドバイザーコードは、無料のニューマーチンデモシグナルとして 開始されます。
 

バージョン1.007 - ターミナルの再起動に対する保護:

//---
   if(!RefreshRates())
      return;

   if(m_first)
     {
      //--- 端末の再起動を防ぐ:
      int total=0;
      for(int i=PositionsTotal()-1;i>=0;i--) // オープンポジションの数を返す
         if(m_position.SelectByIndex(i))     // プロパティにさらにアクセスするために、インデックスによって位置を選択する。
            if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
               total++;
      //--- このExpert Advisorによって取引口座に既にポジションがオープンされている場合。
      //--- というわけで、すでに初回だったと思われるように変数を初期化する。
      if(total>0)
        {
         bln_buy=true;
         bln_sell=true;
         m_first=false;
         return;
        }


      if(OpenBuy(InpLot))
         bln_buy=true;
      if(OpenSell(InpLot))
         bln_sell=true;
      m_first=false;
     }
//---


ターミナルが再起動された場合、またはEAが再コンパイルされた場合で、EAがすでに指定された取引口座で ポジションをオープンしている場合、「初回実行」の状況が発生しないようになりました。

 

バージョン1.108では、クロスオーバー時とTakeProfit時に、利益が出ているポジションがあれば、それも決済されるようになりました。

1.108(トップチャート)と前バージョン1.107を比較してください:

新しいマーチンGBPUSD 107対108

и

新しいマーチン EURUSD 107 vs 108.png

バージョン1.108は、バージョン1.107に比べ、総利益が小さいだけでなく、困難な時期のドローダウンも2倍小さくなっています。

 
マスター、MQ4で使えるようにできますか?