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

 
Taras Slobodyanik #:

なぜ3つのメソッドが必要なのでしょうか?
1つのメソッドですべてを行うのに十分です。

  • 順序を確認した

- modified
- not modified

これは面白い!

Tarasさん、例えばTPとSLで3つの買い注文があったとして、1つの注文でSLを変更したとします。

Question: 変更された注文を見つけるにはどうしたらよいですか?

 
Taras Slobodyanik #:

なぜ3つのメソッドが必要なのでしょうか?
1つのメソッドですべてを行うのに十分です。

  • 順序を確認した

- modified
- not modified

一つは、変更されたオーダーのチケットが格納されるOrdersTotal()を介して配列のサイズを制御し、もう一つはこの配列からチケットを検索するものである。しかし、今、私はこのすべてとは関係ない別の場所でコードを変更し、なぜか私はエラー(配列オーバーラン)をキャッチしています。
 
MakarFX #:

面白い!

Tarasさん、例えばTPとSLで3つの買い注文があったとして、ある注文でSLが変更されたとします。

Question: 変更されたオーダーを見つけるにはどうしたらよいですか?

明らかに、SL(またはTP)は理由があって変更されたのですよね?
何らかの条件に基づいて確認する必要があります。

そして、次のチェックでは、この条件は「fulfilled」と定義され、注文はすでに変更されたことになります。


PS.手動修正ということであれば、誰かがEAの知らないところで何かを変えてしまうので、当然、配列構造を収集し、常に成行注文と比較する必要があります。

 
Taras Slobodyanik #:

なぜ3つのメソッドが必要なのですか?
1つのメソッドですべてを行うのに十分です。

  • 順序を確認した

- modified
- not modified

順番は1ではなく、仮に10個あるとします。修正したそれぞれのチケットを配列に書き込んでいます。しかし、今のところこれは問題です。
 
MakarFX #:

削除

MakarFX さん、ありがとうございます。これで、余計な非シグナル1順目はなくなりましたが、なぜかシグナル1順目(通常)が2ローソク早く入っています)))テスターからのスクリーンショットをメッセージに添付しましたが、この最初の注文にもかかわらず - 最も重要なことが行われ、再びどうもありがとうございます)マジシャンがそれを得たので、私は外部変数を作り、私は特定の通貨ペアチャートにエスペルトを添付すると、私は個別に各ペアの番号を変更することになります。

 
Nerd Trader #:
オーダーは1ではなく、10あります。修正したそれぞれのチケットを配列に書き込んでいきます。しかし、今のところ、これが問題です。

TP/SLを変更する必要がない限り、条件に従って、=注文はすでに変更されているのです。

 
SanAlex #:

は、テスターで楽しむには良いですね。

そして、これはあなたへのプレゼント、お金を稼ぐためのものです。

\\\\\\\\\\\\\\\\\\\\\\\\\\

テストのために走らせたのですが、今夜はどうなることやら。

\\\\\\\\\\\\\\\\\\\\\\\\\\\

すべてのチャートでパターンがどのように変化するかを確認し、すべてがうまくいきました。-全体の利益が目標に達したこと。


SanAlex、とても興味深いです。このEAをぜひ詳しく調べてみます。

 

みんな、コードのアドバイスで良い一日、ここで2つの取引マイナス購入の右側のグラフだ - 売却、購入販売で覆われている、アルゴリズムによると、購入に入力する必要がありますが、なぜ - その後見て、歴史の中で最も最近のマイナス取引を生成するこれら二つの金融、 - プラスの両方を示しています! - 私は、私は、この2つの取引、マイナス購入の右側にあるグラフを参照してください。このTCフリップ、平均化 - - これらの同じF-iはマイナス売った後、要するに、適切に動作します - 買いを開く必要がありますが、それは、開いていないため、書き込む方法と場所エラー言い換えれば、私の注文が負けている場合、買いを開くべきですが、買いは開きません。なぜなら、f-iは、取引が最も端的に負けている場合、このf-iiaはTRUEを報告し、それ以外は偽ですが、どちらもTRUEを報告すると考えるからです。判断材料にしてください。



// проверка предыдущего минусового селл
bool Calc_Loss_SELL()
  {
   bool ord;
   bool TotalLot=false;
   HistorySelect(TimeCurrent()-HistoryDaysLoadI*86400,TimeCurrent());
   for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
         && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger(ticket,DEAL_TYPE) ==  DEAL_TYPE_BUY)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) < 0)
           {
            TotalLot=true;
            if (УСРЕДНЯЛКА) Print(" усреднение в селл разрешено ",TotalLot);
            else  Print(" ПЕРЕВОРОТ В БАЙ разрешен ",TotalLot);
            break;
           }
         else
           {
            break;
           }
        }
     }
   return (TotalLot);
  }


// проверка предыдущего минусового бай
bool Calc_Loss_BUY()
  {
   bool ord;
   bool TotalLot=false;
   HistorySelect(TimeCurrent()-HistoryDaysLoadI*86400,TimeCurrent());
   for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
         && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger(ticket,DEAL_TYPE) == DEAL_TYPE_SELL)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) < 0)
           {
            TotalLot=true;
            if (УСРЕДНЯЛКА) Print(" усреднение в бай разрешено ",TotalLot);
            else  Print(" ПЕРЕВОРОТ В СЕЛЛ разрешен ", TotalLot);
            break;          
           }
         else
           {
            break;
           }
        }
     }
   return (TotalLot);
  }


    //----------------------------------------------
      // проверка условий ПЕРЕВОРОТА В СЕЛЛ
      // нет поз рыночных и предыдущая сделка В БАЙ была минусовая и не было минусового селла
       Print(" Calc_Loss_BUY(): ",Calc_Loss_BUY(), " Calc_Loss_SELL(): ",Calc_Loss_SELL());
      
      if(!PositionSelect(Symbol()) && Calc_Loss_BUY() && !Calc_Loss_SELL())
        {
         m_trade.Sell(CalcLot(),_Symbol,LastTick.bid,LastTick.ask+double(SLE)*_Point,LastTick.bid-double(TPE)*_Point - _Spread*_Point);
         Print(" ПЕРЕВОРОТ БАЯ В СЕЛЛ, Calc_Loss_BUY(): ",Calc_Loss_BUY());
        }

 
      // проверка условий ПЕРЕВОРОТА в SELL
      // нет поз рыночных и предыдущий селл был минусовой И НЕ БЫЛО МИНУСОВОГО БАЙ
      
      if(!PositionSelect(Symbol()) && Calc_Loss_SELL() && !Calc_Loss_BUY())
        {
         m_trade.Buy(CalcLot(),_Symbol,LastTick.ask,LastTick.bid-double(SLE)*_Point,LastTick.ask+double(TPE)*_Point + _Spread*_Point);
         Print(" ПЕРЕВОРОТ СЕЛЛА В БАЙ, Calc_Loss_SELL(): ",Calc_Loss_SELL());
        }

買いが開かないのですが、ユビュティカルセルの後に開くはずです!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


本質的に、問題は利益または損失を決定するために降りてくる買いまたは売りの貿易となり、そのタイプにさらに見てマージナルポジションを、閉じました

HELP!PLUS!

 

ごきげんよう。

注文のグリッド全体を計算する機能と、注文を決済する機能があります

//+------------------------------------------------------------------+
double CalculiteProfit()
{
    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);
}
//+------------------------------------------------------------------+
 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 op = CalculiteProfit(); 
     if (op >= Profit)
     {
       ClosseAll();
     }

利益 - デポ通貨での設定において

その考え方:オーダーグリッド計算値がゼロ+ 入金 通貨のProfitに なった後、 オーダーグリッド全体がクローズ される。

Profitの 代わりにポイントが 付くようにコードを変更したいのですが、どうすればよいでしょうか?ありがとうございます。

 
Taras Slobodyanik #:

明らかに、SL(またはTP)は理由があって変更されたのですよね?
しかし、ある条件によると

したがって、次のチェックでは、この条件は「fulfilled」と定義され、注文は変更されたことになります。


もし、手動で変更する場合、誰かがEAの知らないところで何かを変更するのであれば、当然、配列構造を収集し、常にマーケットオーダーと比較する必要があります。

もう忘れていた...と最初の頃はそうしていたが(コミットしておいて良かった)、条件の出し方が頼りなく思えたので、変更された順番を示す、もっと分かりやすいものが欲しかった。