参議院の実施について議論。 - ページ 8

 
altec3:

こんにちは。

現在の日の利益を決定する関数を書こうとしています。

関数内の方法を教えてください。

現在を起点とする期間を指定する。期間終了をto_date=TimeCurrent()とすることは明らかですが、期間開始をfrom_dateで指定し、現在の日の00h:00m:00cから始まるようにするにはどうしたらよいでしょうか。

お好みでお選びください。

datetime  iTime(
   const string        symbol,          // символ
   ENUM_TIMEFRAMES     timeframe,       // период PERIOD_D1
   int                 shift            // сдвиг
   );
int  CopyTime(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период PERIOD_D1
   int              start_pos,       // откуда начнем 0
   int              count,           // сколько копируем 1
   datetime         time_array[]     // массив для копирования времени открытия. Объявить заранее

あるいは最も、です。というのは、すでに提案されていることです。

 
Vladimir Karputov:

今日、少なくとも1回刻みがあったと仮定すると、アルゴリズムは次のようになります:現在時刻はMqlDateTime 構造体に送られます。そして、この構造で時、分、秒をゼロに設定します。あとは、編集した構造を時間に変換するだけです。


結果

ありがとうございました。もう一つの質問ですが、もし私が関数

//+------------------------------------------------------------------+
//|Функция возвращает прибыль за текущие сутки                       |
//+------------------------------------------------------------------+
double Day_Profit()
  {
//--Запрашиваем историю сделок за последнии сутки
   HistorySelect(TimeCurrent()-PeriodSeconds(PERIOD_D1),TimeCurrent());
   uint     total       =HistoryDealsTotal();   // количество сделок в истории
   ulong    ticket      =0;                     // тикет сделки в истории
   long     type        =0;                     // тип сделки
   double   profit      =0.0;                   // финансовый результат сделки
   double   commission  =0.0;                   // коммиссия по сделке
   double   DayProfit   =0.0;                   // прибыль за текущие сутки
//--- for all deals
   for(uint i=0; i<total; i++)
     {
      if((ticket=HistoryDealGetTicket(i))>0)       //--- если имеются сделки, то...
        {
         profit      =HistoryDealGetDouble(ticket,DEAL_PROFIT);
         commission  =HistoryDealGetDouble(ticket,DEAL_COMMISSION);
         if(HistoryDealGetInteger(ticket,DEAL_TYPE)!=DEAL_TYPE_BALANCE)
           {
            DayProfit+=(profit+commission);
           }
        }
     }
   return (DayProfit);
  }
//+------------------------------------------------------------------+

を Expert Advisor に追加した場合、トレードを分析する期間はどのように更新されるのでしょうか。例えば、Expert Advisorが数日間動作した場合、次の日になったら期間が更新されるのでしょうか?

Expert Advisorにおける上記機能の実装。

void OnTick()
  {
   if(Day_Profit()<ProfitMax)
     {
      ExtExpert.OnTick();
     }
   return;
  }
 
altec3:

ありがとうございました。もう一つ質問ですが、関数を追加した場合。

をExpert Advisorに追加した場合、トレードを分析する期間はどのように更新されるのでしょうか?例えば、Expert Advisorが数日間動作した場合、翌日には期間が更新されるのでしょうか。

Expert Advisorに上記の機能を実装したものです。

時刻は、1日の始まりから現在時刻+1日 または+3日までを設定します。

一日の始まりの決め方は、もうお分かりですね。

 

こんにちは。

シンボルに注文を出す前に、そのシンボルのスプレッドを決定する必要性があります。MQL5の標準ライブラリには、CsymbolInfoクラスが含まれています。そこで、このチェックをCSymbolInfoで行うか、関数で 行うか、どちらの方法で実装するのが良いのだろうかと考え始めた。専門家の方、どうしたらいいかアドバイスをお願いしますこの質問がすでに提起されているのであれば、正しい方向に導いていただけると大変ありがたいのですが。

 

こんにちは。

アドバイスが必要な状態です。EAに異なる時間枠のシグナルモジュールが含まれている場合、どのようにバーを考慮しますか?

例えば、ストキャスティックに基づく2つのシグナルモジュール(メインラインが0と1バーのシグナルラインより上にあるとき-買い、0と1バーのシグナルラインより下にあるとき-売り)をH1とM15に持つ単純なExpert Advisorがあります。両モジュールのウェイトは同じで、Expert Advisorでは、両モジュールからのシグナルが同時に考慮されるように、取引の開始のしきい値が設定されています。Expert Advisor は、タイムフレーム H1 のチャート上で動作します。H1のスクリーンショットを見ると、すべてが明確です。メインラインが最後と最後のバーでシグナルラインより高い位置にあり、それが買いの理由です。しかし、M15のチャートでは、どのバーを0とみなし、どのバーを1とみなすのかが理解できません。取引はオープンだ。つまり、M15には取引の条件も満たされるはずだ。

ファイル:
H1.png  43 kb
M15.png  21 kb
 
altec3:

例えば、ストキャスティクスに基づく2つのシグナルモジュール(メインラインが0と1バーのシグナルラインより上にある場合:買い、0と1バーのシグナルラインより下にある場合:売り)を含むシンプルなExpert Advisorがあります - H1用とM15用のものがあります。

ゼロバーは邪道だ!あなたが見る歴史上の指標は、1バーの場合と同様に計算 - 閉じた(よく、簡略化、再クロスの可能性を考慮しない場合)。したがって、戦略はクローズドバーで構築され、テスターでは、MT4の古いTFからの指標は、ゼロバーであっても、クローズドとして、すなわち、未来からの結果を表示することになります。
その結果、テスターではあることが違うのに、リアルタイムではその逆が起こるという失望を味わうことになります。
私は、システムエラーの原因を突き止めようとして、人生の半分を棒に振ってしまったのです。TFの高い指標を低い指標に正しくマッピングするには、特別なアプローチが必要です。 通常、Pushkaなどでは、すべてがシンプルです - TFの比率と順序で期間を掛けるが、非線形計算がある場合、唯一の0バーでの計算の模倣があります。
RSIを1年かけて壊して、チャートに主要なTFを正しく表示させるようにしていました。
私は主張しませんが、私は最低限、閉じたバーからのシグナル、特に現在のタイムフレームとの関係でより高いからのシグナルを使用し、また特に カスタムインジケータを 再評価するためにチェックすることをお勧めします。
 
altec3:

こんにちは。

アドバイスが必要な状態です。EAに異なる時間枠のシグナルモジュールが含まれている場合、どのようにバーを考慮しますか?

例えば、ストキャスティックに基づく2つのシグナルモジュール(メインラインが0と1バーのシグナルラインより上にあるとき-買い、0と1バーのシグナルラインより下にあるとき-売り)をH1とM15に持つ単純なExpert Advisorがあります。両モジュールのウェイトは同じで、Expert Advisorでは、両モジュールからのシグナルが同時に考慮されるように、取引の開始のしきい値が設定されています。Expert Advisor は、タイムフレーム H1 のチャート上で動作します。H1のスクリーンショットを見ると、すべてが明確です。メインラインが最後と最後のバーでシグナルラインより高い位置にあり、それが買いの理由です。しかし、M15のチャートでは、どのバーを0とみなし、どのバーを1とみなすのかが理解できません。取引はオープンで、M15には取引の条件も満たす必要があるということです。

履歴にはすでに閉じたバーが表示されます。ゼロバーは悪ではありませんが、可動式であり、それを考慮に入れなければなりません。現在の価格に応じて 形成され、価格がジャンプしたときに方向転換する確率があるため、より敏感で、例えば閉じることができます。

0 && 1 && 2を開くだけで、もう1本バーを追加してみてください。もしかしたら、梅が減ります。

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...