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

 
ksbr:
MT5に株(先物)を入れて自分のをテストしたいのですが、どうしたらいいですか?
できない。先物を扱っている証券会社を探す。
 
sergeev:
まさか、この先物がある証券会社を探す。

%)))このfuchsでDCはありません)))糊付けが必要なのですが...。

残念だ、残念だ、せっかくきれいに始まったのに...。

 

皆さん、こんにちは。

私のEAに2つの関数を実装しようとしています。1つ目は最後の取引の利益を定義し、2つ目は最後の取引のロットを定義しています。

このサイトをAからZまで検索し、記事や他のEAの例に従っていくつかの関数を作りましたが、結果は出ず、どちらの関数も常に0.00を返します。

これが正しい変形に最も近いと思われるが、結果は常に0である。

double LossLastPos(){
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   HistorySelect(start,end);
//--- получим количество ордеров в истории
   int history_orders=HistoryOrdersTotal();
//--- получим тикет ордера из истории, имеющего последний индекс в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // получили в кэш исторический ордер, работаем с ним
     {
      //Получаем значение прибыли последнего ордера
      double  profit = HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
      return(profit);
     }
}

同じようにロットサイズを取得するようにしています。

double  volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
      return(volume);

そして、何も動作せず、値は常にゼロです。

私自身、mql4からmql5への移行を始めたばかりで、mql4でのこのような機能の実装はそれほど難しくなかったのですが、ここでデッドロックが発生しました。

本当に使える解決策をご教示ください。

 
karakos:

...

実際に動作する解決策を提案してください。

HistoryDealGetTicket()とHistoryDealsTotal()を使用します。

そして、検証を行う。

   if(HistorySelect(start,end))
     {
      // ...
     }
 

tol64 ありがとうございました。すべてがうまくいっている。

この関数は、端末の履歴にある最後のクローズポジションの利益を返します。

//+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
double ProfitLastPos()
  {
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   if(HistorySelect(start,end))
     {
      //--- получим количество сделок в истории
      int history_orders=HistoryDealsTotal();
      //--- получим тикет сделки из истории, имеющей последний индекс в списке
      ulong order_ticket=HistoryDealGetTicket(history_orders-1);

      if(order_ticket>0) // получили в кэш историческую сделку, работаем с ней
        {
         profit=HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
        }
     }
   return(profit);
  }

類推により、最後の取引のロットサイズを得ることができます。

 Volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
 
karakos:

tol64 ありがとうございました。すべてうまくいっている。

...

また、エディターでCtrl+も 押せば、きちんとした書式のコードになります。特に、フォーラムにサンプルをアップロードする前に重要です(読みやすさが向上します)。))
 
tol64:
エディタでCtrl+も 押せば、きちんとした書式のコードが得られます。これは、フォーラムにサンプルをアップロードする前に特に重要です(読みやすさが向上します)。))
コードのスタイリング、いつもありがとうございます
 

ごきげんよう!最近MQL5を学び始めました。ポジションクローズで困って います。コード内: if(!m_Trade.PositionClose(_Symbol,100))//--- 現在のシンボルでポジションをクローズします。結果、立場が逆転!ヒントがあればありがたいのですが、ポジションを閉じるにはどうしたらいいのでしょうか?

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
                          
         if( p_close1 <  buy_stop_level   )// если бар 1 закрылся ниже уровня стоп
         {
          if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу
         {
      //--- сообщим о неудаче
      Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),
            ". Описание кода: ",m_Trade.ResultRetcodeDescription());
         }
   else
         {
       Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode(),
            " (",m_Trade.ResultRetcodeDescription(),")");       
          }
    
     
           }          
            }
 

バーがストップレベルより下に閉じた後、EAログを記録します。ロングポジション=1ロット、ショートポジション=1ロット)

理由: