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

 
まだ質問の意味がわからない?
 
MrBrooklin:

ウラジミールさん、こんにちは。

以下のスクリプトの冒頭部分を修正したいのですが、ご教授ください。

アスクとビッドからではなく、前のバー(ローソク足)の高値と安値から保留中の注文を設定するスクリプトが必要です。

敬具 ウラジミール

こんな感じ。

//--- start work
   double start_price_ask=0.0;
   double start_price_bid=0.0;
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int start_pos=0,count=3;
   if(CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CopyRates ");
      return;
     }
//---
   if(InpPending==stop)
     {
      start_price_ask=rates[1].high+ExtUpGap;
      start_price_bid=rates[1].low-ExtDownGap;
     }
   else
      if(InpPending==limit)
        {
         start_price_ask=rates[1].low-ExtDownGap;
         start_price_bid=rates[1].high+ExtUpGap;
        }
 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

初心者からのFAQ MQL5 MT5 MetaTrader 5

ウラジミール・カルプトフ 2019.09.18 12:49

こんな感じです。

//--- start work
   double start_price_ask=0.0;
   double start_price_bid=0.0;
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int start_pos=0,count=3;
   if(CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CopyRates ");
      return;
     }
//---
   if(InpPending==stop)
     {
      start_price_ask=rates[1].high+ExtUpGap;
      start_price_bid=rates[1].low-ExtDownGap;
     }
   else
      if(InpPending==limit)
        {
         start_price_ask=rates[1].low-ExtDownGap;
         start_price_bid=rates[1].high+ExtUpGap;
        }

素晴らしい!!!ありがとうございました。

ウラジミールさん、ありがとうございます。

 
フルパラメーター列挙でカスタム基準を使用できないのはなぜですか、この神聖な意味は何ですか?
 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

初心者からのFAQ MQL5 MT5 MetaTrader 5

ウラジミール・カルプトフ 2019.08.31 14:38

お願いします。

グローバルプログラムレベルで宣言された変数m_first_startに注意してください。

bool        m_first_start  = false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()

OnTickの終了時に、この変数に値 "true "が代入されます。

//---
   m_first_start=true;
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {

をクリックすると、EAは次の再起動まで未決済注文を 出さないようになります。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(m_first_start)
      return;

ウラジミールさん、こんにちは。

EAがすべてのバーで保留中の注文を出すように、コードを修正する方法を教えてください。単純に黄色のマークをすべて削除しようとしたのですが、すぐに何千もの注文やポジションを開き始めてしまいます。

敬具 ウラジミール

 
MrBrooklin:

ウラジミールさん、こんにちは。

私の自己啓発を強化するために、EAがすべてのバーで保留中の注文を配置するようにコードを変更する方法をアドバイスしてください。黄色でマークされたものをすべて削除しようとしただけなのに、すぐに何千もの注文やポジションを開き始めてしまうのです。

敬具 ウラジミール

新しいバーが生まれる瞬間を察知して、その時だけ注文を 出すべきです。

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
/*
   barabashkakvn Trading engine 3.043
*/
#include <Trade\SymbolInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//--- input parameters

//---
datetime m_prev_bars             = 0;        // "0" -> D'1970.01.01 00:00';

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- we work only at the time of the birth of new bar
   datetime time_0=iTime(m_symbol.Name(),Period(),0);
   if(time_0==m_prev_bars)
      return;
   ЗДЕСЬ РАЗМЕЩАТЬ КОД ПО ВЫСТАВЛЕНИЮ ОТЛОЖЕННЫХ ОРДЕРОВ
//---
  }
//+------------------------------------------------------------------+
ファイル:
Test.mq5  4 kb
 

ウラジミールさん、ありがとうございました。

ウラジミールさん、謹んで申し上げます。

 
Vladimir Karputov:

新しいバーが生まれるタイミングを見極め、その時だけ注文を 出すことが必要です。

絶対に決まっています!これらの疑問はどこから来るのでしょうか?怠惰からか、それとも他の何かからか?

 
Сергей Таболин:

絶対に決まっている!これらの疑問はどこから来るのでしょうか?怠惰からか、それとも他の何かからか?

MrBrooklinは まだ第一歩を踏み出したばかりなので、ヒントが必要なのです。誰もが最初は、一度は緑になったことがある。

 
Vladimir Karputov:

MrBrooklinは 最初の一歩を踏み出したばかりなので、いくつかのヒントが必要です。誰もが一度はスタートし、緑になった。

原則的に反対はしていない。でも、そこには理屈があるはず?

新しいバーをどうにかしてほしい。さて、まずこの新しいバーを定義する必要があります。

こういう質問は初心者ではなく、何でもかんでも噛み砕いて口に入れたがる怠け者のすることだ。脳みそ使えないの?

理由: