MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 194

 
注文の一部を閉じると、そのマジシャンやコメントが消えるなんてことはないでしょうか?
 
Renat Akhtyamov:
誰が知るか - オーダーの一部を閉じると、そのマジックやコメントが消えるのでは?

マジックはそのままで、オーダーチケットが 変更され、コメントには#xxxxxxxxxxの親オーダーチケットが含まれるようになります。親注文は子注文のチケット:to#xxxxxxxxxxを持つことになります。

 
Artyom Trishkin:

マジックはそのままで、オーダーチケットが 変更され、コメントには#xxxxxxxxxxの親オーダーチケットが含まれるようになります。親注文は子注文のチケット:to#xxxxxxxxxxを持つことになります。

オッケーです。ありがとうございました。
 
geratdc:


そうそう、このKはトップハットの外部変数にも あります。


アレクセイ、私の問題について何か言うことはないか?逆指値注文にトレーリングストップを付けるようにしています。このような問題に遭遇したことはありませんか?

そして、この問題について何かを答えるためには、問題そのものを理解する必要があるのです。そして、このことから

geratdc:

私は助けが必要です - 私は3つのストップオーダーを持っていますが、ビデオチュートリアルのトレーリングストップの例 :) はリンクされていないオーダーのみです。私の場合、それらはアルゴリズムによってリンクされており、すなわちtakeprofitは3つのオーダーの合計、または私がトレンドに乗った場合は1つで計算されます。同じ量の注文を獲得するようになりましたが、以前のトレーリングなしのEAと比較して、取引回数が2-3倍少なくなっています。だから、私のトレーリングはトレーリングではなく、ナンセンスなものなのです。リンクされた注文にどのように配置すればよいのでしょうか? どなたかアイデアを教えてください。残念ながら、これ以上思いつきません。 以下は、私の「トレール」の結果で、青色で表示されています。

1のテスト結果を添付します。そこにトレーリングストップはあるのかないのか?理解できない。なぜ、同期の利益が増えなかったのか?案件数だけが 2~3倍に減少?


何も理解できない。一番不思議なのは「何かを発明した」ということですが、何を発明したのか理解できているのでしょうか?そして、これは「連動注文で作る にはどうしたらいいか」です。でも、 これ以上は考えられない」というのがあるんです。

 
Alexey Viktorov:

そして、この問題について何かを答えるためには、問題そのものを理解する必要があるのです。そして、これより

何も理解できない。一番変なのは わかったぞ」ですが、何がわかったかわかりますか?そして、"リンク先のワラントで作る には?"です。でも、 これ以上は考えられない」というのがあるんです。


私の理解では、トレーリングストップは注文に正しく適用できないので、この関数CalculateProfit、すなわち3つの注文の利益の合計がTakeProfitに等しい場合に注文が閉じられるという変数 "op "に大いに注意を払い、この変数を探ってみる必要があります。この方向で何か考えてみようと思います。サードパーティーのアブラカタブラに対応するのは難しいと理解しています)))。
 
geratdc:

私の理解では、トレーリングストップは注文に正しく適用 できません。そのため、この関数CalculateProfit、特に3つの注文の利益の合計がTakeProfitと等しい場合に注文が閉じられる変数 "op" を詳しく見て、この変数を通してトレールすることを試みるべきです。この方向で何か考えてみようと思います。サードパーティーのアブラカタブラを扱うのが難しいのは理解できるのですが)))
なぜ応用が利かないのか?他人の関数に何かをくっつけたり工夫したりするのではなく、自分が欲しいものをすべて実現できるように自分で書くことが必要です。何が問題なのでしょうか?注文数がどうであれ、平均価格を計算し、そこからトローリングする。ある条件が満たされたとき、ループ内のすべての注文を通過するとき、一方向に存在するすべての注文の平均価格から計算される新しいレベルでそれらのストップを並べ替えます。
 
//+------------------------------------------------------------------+
//|                                     BLACKJACK&HOOKERS TrailX.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double  Lots           = 0.01;
extern double  TakeProfit     = 1;
extern int     Step           = 1;

extern double  TrailXStep     = 1;
extern double  TrailXStop     = 1;

extern int     MaPeriod       = 100;
extern int     MaShift        = 1;

extern int     Magic          = 123;
extern int     Slippage       = 5;

int timeprev=0;

extern double price,op,cn,tp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Digits == 3 || Digits == 5)
      //TakeProfit     *= 10;
      Step           *= 10;
      //TrailXStep     *= 10;
      //TrailXStop     *= 10;
      Slippage       *= 10;

      
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   if (timeprev == Time[0]) return;
   timeprev = Time[0];
   double maprice=iMA(Symbol(),0,MaPeriod,MaShift,MODE_SMA,PRICE_CLOSE,1); 
   op=CalculateProfit();
   cn=CountTrades();
   tp=TakeProfit;
   if (tp>TakeProfit)
   {
      TakeProfit+=tp;
   }
   
 

 
   if (cn==0 && CountBuy() + CountSell() == 0 && Ask > maprice)
   {
      if (OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue)<0)
            Print("Не удалось открыть ордер на покупку");
            
   }
   
   if (cn==0 && CountBuy() + CountSell() == 0 && Bid < maprice)
   {
      if (OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red)<0)
            Print("Не удалось открыть ордер на продажу");
            
   }
   

   
   if(cn==1 && CountBuy()==1) 
   {
      price=FindLastBuyPrice();
      if((price-Ask)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1)
            Print("Не удалось открыть ордер на продажу");
      }
   }
   else if(cn==1 && CountSell()==1) 
   {
      price=FindLastSellPrice();
      if((Bid-price)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1)
            Print("Не удалось открыть ордер на покупку");
      }
   }
   
   
   
   if(cn==2 && CountBuy()==1 && CountSell()==1) 
   {
      price=FindLastSellPrice();
      if((price-Bid)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1)
               Print("Не удалось открыть ордер на продажу");
               
      }
      else 
      price=FindLastSellPrice();
      if((Bid-price)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1)
            Print("Не удалось открыть ордер на покупку");
           
      }
   }
   else if(cn==2 && CountSell()==1 && CountBuy()==1) 
   {
      price=FindLastBuyPrice();
      if((Ask-price)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1)
               Print("Не удалось открыть ордер на продажу");
               
      }
      else 
      price=FindLastBuyPrice();
      if((price-Ask)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1)
            Print("Не удалось открыть ордер на покупку");
           
      }
   }
   
   Trailing();

   if (op>=tp)
   {
         CloseAll();    
   }


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }
//---------------------------------------------------------------------------------------
double CalculateProfit()
  {
   double oprofit=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               oprofit+=OrderProfit();
              }
           }
        }
     }
   return(oprofit);
  }
//--------------------------------------------------------------------------------------
void CloseAll()
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage))
                  Print("Не удалось закрыть ордер на покупку");
              }
            if(OrderType()==OP_SELL)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage))
                  Print("Не удалось закрыть ордер на продажу");
              }
           }
        }
     }
  }
//---------------------------------------------------------------------------------------------------
double FindLastBuyPrice()
  {
   int oldticket,ticket= 0;
   double oldopenprice = 0;
   for(int cnt=OrdersTotal()-1; cnt>=0; cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oldopenprice);
  }
//---------------------------------------------------------------------------------------------------
double FindLastSellPrice()
  {
   int oldticket,ticket= 0;
   double oldopenprice = 0;
   for(int cnt=OrdersTotal()-1; cnt>=0; cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oldopenprice);
  }
//----------------------------------------------------------------------------------------------
int CountBuy()
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
            count++;
        }
     }
   return(count);
  }
//----------------------------------------------------------------------------------------------
int CountSell()
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
            count++;
        }
     }
   return(count);
  }
//+---------------------------------------------------------------------------------+
int CountTrades()
{
    int count=0;
    for (int i=OrdersTotal()-1; i>=0; i--)
      {  
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                  count++; 
         }
      }
      return(count);
}
//----------------------------------------------------------------------------------+
int FindLastOrderType()
{
      for(int i = OrdersTotal()-1; i>=0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(OrderType());
         } 
      }
      return(-1);
}
//----------------------------------------------------------------------------------+

これはCalculateProfit()関数によるトレーリングの亜種で、どちらのトレーリング亜種も取引において同じ指標を持っています -取引回数 と利益の両方においてです。利益は多くない。今度はボラティリティとより正確なエントリー指標を追加するつもりだ。これらの問題は、同じインジケーターで解決できるのではないでしょうか?例えば、最後の5小節を分析するとか、そういうことです。このようなバー指標は何と呼ばれているのでしょうか?また、最適なタイムフレームは?どうすれば1つの指標で2つの鳥を得ることができるのか、あなたの考えを聞かせてください ...一石二鳥です :)

このEAのトレーリングバーをどのように見て いますか?

 
Alexey Viktorov:
なぜ応用が利かないのか?他人の関数に何かを付け加えたり、工夫したりする必要はなく、自分がやりたいことができるように自分で書くのです。何が問題なのでしょうか?注文数が何であれ、平均価格を計算し、そこからトロールを行う。ある条件が満たされたとき、ループ内のすべての注文を通過するとき、一方向のすべての注文の平均価格から計算される新しいレベルでそれらのストップを並べ替えます。

保存しました、ありがとうございました。まだ、そうは思っていません。ビデオチュートリアルでは、これまでに実装したものを一通り見てきましたが、私の頭の中には、コードや関数のライブラリがあるはずです。もっと上手になって、皆さんのアドバイスを実践してみようかな。今日、私が発明したもの、トロールに見えますか?さて、Expert Advisorはレポートに従ってトロールしますが、どれが正しいのか分かりません。間違ったトロールは損失の確率を高めるだけです。失敗する確率は0.9と、おおまかに言ってそうです)))横ばいを非常に恐れており、今はインジケータが弱いと言えるでしょう。トレンドに参加しているだけで、3つのオーダーを持っていて、相場が突然方向転換してドローダウンを出したら、資金切れになってしまいます。
 
geratdc:

保存しました、ありがとうございます。まだ、そんなふうに考えられないんです。私の頭の中にはコードや関数のライブラリがあるはずで、ビデオチュートリアルを見て、それを今使っているのです。もっと上手になって、皆さんのアドバイスを実践してみようかな。今日、私が発明したもの、トロールに見えますか?さて、Expert Advisorはレポートに従ってトロールしますが、どれが正しいのか分かりません。間違ったトロールは損失の確率を高めるだけです。失敗する確率は0.9と、おおまかに言ってそうです)))横ばいを非常に恐れており、今はインジケータが弱いと言えるでしょう。トレンドに参加しているだけで、3つのオーダーを持っていて、相場が突然方向転換してドローダウンを出したら、資金切れになってしまいます。

まあ、もうちょっと頑張って教育していこうと思います。

送るときの宛名は「あなた」にします。ポインターのスナップショットがあるのですが・・・。

教えてください。同じティックで同じ関数を5回呼び出すのはおかしいと思いませんか?しかし、それでは悩みが半減してしまいます。この機能は、すべての注文を調べます。しかも、これを1回で5回も...。そして、そのような機能は4つ数えることができます。このループを使えば、あと3つの関数を簡単に追加して、すべてのオーダーを検索することができます。

そのうちの2つをご紹介します。

if (cn==0 && CountBuy() + CountSell() == 0 && Ask > maprice)
if (cn==0 && CountBuy() + CountSell() == 0 && Bid < maprice)
if(cn==1 && CountBuy()==1)


else if(cn==1 && CountSell()==1) 
if(cn==2 && CountBuy()==1 && CountSell()==1) 


else if(cn==2 && CountSell()==1 && CountBuy()==1)

これらは、.

Trailing();


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }


引き離すこともできない。

これを理解するためには、トレーリングの定義を明確に理解する必要がある。一字一句覚えていないが、次のように表現できる。「起こりうる損失を減らすため、あるいは "保証された "利益を増やすために、価格に従ってStopLossレベルを移動させる」。


そして、この

extern double price,op,cn,tp;

Expert Advisorを実行すると、どのように見えるのでしょうか?おそらく4行で...。は必要ですか?


今日の最後にもうひとつ、頭の中に図書館がなくても大丈夫です。ドキュメントがあって、使い方がわかっていれば十分です。iMA(_Symbol、_Period、、、、)のパラメータはまだ全部覚えておらず、さらにドキュメントを見ただけで書いています。というように、ほとんどすべての機能が幸いなことに、少し前にツールチップが作られましたが、これはあまり役に立ちません。この列挙の書き方、この列挙の書き方を暗記しようというのではありません。だから、いちいちドキュメントを見ないといけない。

 

このチェックボックスの状態をチェックする関数を教えてください。