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

 
artem artem #:

SanAlex さん、はい、今年の現行品のテスターを見ましたが、オールオッケーでした)結果は良好で、近いうちに実際のアカウントで動かしてみるつもりです。

Expert Advisorの名称は何ですか?kodobaseからダウンロードされたのでしょうか?作者がどのように関数に実装したかを確認する必要がある

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

何かが足りない - オンティックに条件を追加するために

 
SanAlex #:

エキスパートの名前は?kodobaseからダウンロードされたのでしょうか?作者がどのように関数に実装したかを確認する必要がある

何かが足りない-オンティクに条件を加えるために

サーシャ タイミングワークが入ってないんですよ。開発中にプラグインする機能を追加しただけ)
 
MakarFX #:
サーシャ タイミングワークが入ってないんですよ。開発中にプラグインする機能を追加しただけ)

自分なりにやり直そうと思っています。

 
artem artem #:

SanAlex さん、はい、今年の現行品のテスターを見ましたが、オールオッケーでした)結果は良好で、近いうちに実際のアカウントで動かしてみるつもりです。

これと時間がうまくいく - 関数を変更しました

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

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

mt4とmt5のTime関数が動作 します。

ファイル:
 
MakarFX #:
授業をなくしたいのでは?

つい最近知りました。なんつーか、メガ便利だな。何かご提案がありますか?すべてを関数に落とし込む?それで問題が解決するなら。

1つのクラスBarの2つのグローバルオブジェクト(bar, db_last)があり、1つ目はそれぞれの新しいバー(チャート上の通常のバー)のパラメータで初期化され、2つ目はすべての条件に対応するバーを保存します。実は、Orderクラスの別のローカルオブジェクトでは、オーダーを開くためのパラメータdb_lastからすべての計算が行われます。パラメータdb_lastとbarは多くの場所で使用されていますが、読み取り、初期化および代入はOnTick()の1箇所で発生するだけなので、オブジェクトの予期せぬ変更はないはずです。

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

つい最近知りました。なんつーか、メガ便利だな。何かご提案がありますか?すべてを関数に落とし込む?そ れで問題が解決するなら。

1つのクラスBarの2つのグローバルオブジェクト(bar, db_last)があり、1つ目はそれぞれの新しいバー(チャート上の通常のバー)のパラメータで初期化され、2つ目はすべての条件に対応するバーを保存します。実は、Orderクラスの別のローカルオブジェクトでは、オーダーを開くためのパラメータdb_lastからすべての計算が行われます。パラメータdb_lastとbarはいろいろなところで使われていますが、読み込みに限っては、初期化と代入がOnTick()の一箇所で行われるので、予期せぬオブジェクトの変化が起こらないはず です。

お金がかからないので)やってみようと 思います。

しかし、誤差が あり、さらに、単純な正規化では誤差がある

プライベートメッセージでファイルを送ってもらえますか?見てみようかな。
 
SanAlex #:

エキスパートの名前は?kodobaseからダウンロードされたのでしょうか?作者がどのように関数に実装したかを確認する必要がある

私は何かを見逃していた - ontikに条件を追加するには

SanAlex、ダウンロードしたバージョンをこのメッセージに添付しました。Puria + Trailing Stop + Breakeven level + watchdog tradingを備えています。時計でトレードのテストをするのですが、まだ手をつけていないだけです)

 
MakarFX #:

履歴がないため、テスト開始時のインジケーターの読みに影響する

MakarFX さん、私もそう思っていたので、そのとおりに動くはずです

 
artem artem #:

SanAlex、この投稿でダウンロードしたバージョンを添付しました。Puria + Trailing Stop + Breakeven level + 時計取引です。時計による取引をテストしたいのですが、まだ手をつけていないだけです)。

kodobasehttps://www.mql5.com/ru/code/12654 で見つけました。

- 的を外してしまいましたが、その中で何を変えたかったのでしょうか?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

kodobasehttps://www.mql5.com/ru/code/12654 で見つけました。

- 的を外してしまいましたが、その中で何を変えたかったのでしょうか?

どんな付加価値をつけたかったか

1.取引の開始と すべての指標の条件(高速(5)2遅い(75)(85)と高速(5)と同じ方向に開くMACDバーを交差)をチェック することは、新しいろうそく (各30分のろうそくの非常に最初のティックを 開始時にのみ 行われたように、する。)
  1. 指標の「ゼロ化」のための 条件を整備する。例えば、こんな感じです はやいもの勝ちです (5) スローより高ければ-、それは買いのシグナルです。その後、下降してそのいずれかに触れるか、あるいは低速の(75)と(85) の間にある 場合、高速の指標からの信号はいわば ゼロ」であり、低速のものに触れるか間にある 限り、この ゼロ」 位置に留まることになるのです。その後 高速のものが低速のものと両方片側に 交差 した場合(低速のものに触れる前に来た側に戻った場合も含む) それはこの指標のシグナルと なります。 MACDの場合も同じような状況です-MACD=0だけが "ゼロ "とみなさ れます(最初のキャンドルでMACDは、例えば、0.0043で開かれ、0.0010で 2番目のキャンドルで、それは2番目のキャンドルでMACDが" ゼロ" と新しいシグナルを与えていることを意味します)。しかし fast(5)とMACDがある種の「対等 な立場」になるべき 時があります。(5)がslowに対して位置を変えず、MACDが前のローソク足で間違ったゾーンで開き(ノーエントリー)、次のローソク足ではfastと同じゾーンで開いていれば、すべての条件が収束して、注文へのエントリーが発生すべき時なのです。これはすべてローソクの始値だけで、この1ティックだけで あることに注意してください。
  1. そして最後に、Expert Advisorに4つの連続したローソク足のオープンを待た せるために、

    1. 1回目の始値 - (5) 上記 (75) と (85) + MACDバーが0を超えてオープン- 4回中1回確認;
    2.2本目のローソク足の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4回中2 回の確認は;
    3本目のローソク足の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4回中3回の確認は
    4.ローソク足の始値は、(5)と(85)の間に、"0 "を超えた。4本目のローソク足の始値 - (5)が(75)と(85)を超える + MACDバーが0より上に開く- 4本中4本がイエス- 同じローソク足で買い取引を開始(4日)。
売り 注文と同じ状況で、唯一の他の方向で指標を開く必要があります。そして、重要なポイントがあります- 例えば、4日に1番目のろうそくの任意の段階で 指標は、その位置を 変更 する場合(例えば、3番目のオープニングキャンドルで、MACDのバーは0以下のいずれか、または= 0)を開き- 信号が連続して4番目のろうそくのオープニングでチェックされていないので、その後すべてが、リセット されます。