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

 
Vladislav Andruschenko:
スプレッド、カレントに設定されている場合。現行で請求されている場合は、テスト終了日。 その他にも多くの理由が考えられます。

スプレッド固定、終了日18.01.01

 
Aidar Kaliaskar:

スプレッド固定、終了日18.01.01


ポイント・コスト


この週末に試してみてください。

 

MQL4で、「US.500+」チャートに「US.30+」からの終値でラインを引くインジケータを作ろうとしています。一般に、2つのシンボルの価格ラインは、1つのチャート上で見ることができます。以下はそのコードですが、うまくいきません。ログメッセージに「indicator on custom buffer is not supported yet」と表示される。なぜうまくいかないのか、教えてください。オプス

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1  DRAW_LINE
//---
input string   symbolName="US.30+"; // Symbol name
input double   difference=-22387.0; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,otherSymbol,INDICATOR_DATA);
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,
                const int     prev_calculated,
                const int     begin,
                const double &price[])
  {
//---
   for(int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+1]=iClose(symbolName,PERIOD_CURRENT,i)+difference;
   ArraySetAsSeries(otherSymbol,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Maxim Khrolenko:

MQL4で、「US.500+」チャートに「US.30+」からの終値でラインを引くインジケータを作ろうとしています。一般に、2つのシンボルの価格ラインは、1つのチャート上で見ることができます。以下はそのコードですが、うまくいきません。ログメッセージに「indicator on custom buffer is not supported yet」と表示される。なぜうまくいかないのか、教えてください。オプス

なぜなら、呼び出しの第一形式を使わなければならないからです。
 
Artyom Trishkin:
なぜなら、呼び出しの第一形式を使わなければならないからです。
変更したら...うまくいった!ありがとうございました。
 
STARIJ:

60秒はループの外側にカウントされるはずです。

ありがとうございます、分かりやすく説明してくれてありがとうございます。

60秒ではなく、300秒になる場合。

ポジションオープン時間が 異なるので、ポジションオープン時間から300秒離して書く必要があります。

どうすればいいのでしょうか?

 
lil_lil 60秒でなく300秒なら・・・。ポジションをオープンしてから300秒間隔で書き込む必要がありますが、どのようにすればよいのでしょうか?

私のプログラムを試したことがありますか?300ってよくわからないんだけど...。60ではなく、300とした場合、本当でしょうか?どうすれば儲かるのか、教えていただければ、もっと理解できるようになりますよ。

 

EAのヘルプ、いつものように問題はおそらく些細なことですが、私は難問を解決していません

ema>smmaでemaから 買いを入れるか、そのポイントに達して いない場合(売りも同じ)。バーが終了した時点で取引を終了し、新しいバーをオープンする必要があります。同じように次のオープンをしますが、前のオープンの価格より 上の条件、つまりlast_order_priceを 指定します。

でも、結局は好きなところで開いて、好きなところで閉じる。(テスト開始時に開き、すぐに閉じる)。

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int MA_period=10;
input int take=200, stop=200, Magic=1104;
input double lot=0.05;
input int slippage=30;
input int point=5;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
 
   if(fast_MA>slow_MA) last_order_price=0;
      else last_order_price=Ask+stop*_Point;

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

   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
   
   if(Bid<=fast_MA+point*_Point && Bid>=fast_MA && fast_MA>slow_MA && SymOrder() && Bid>last_order_price)
   {
      OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Ask-stop*_Point,Ask+take*_Point,NULL,Magic,0,clrBlue);
      last_order_price=Bid;
   }
   
   if(Bid>=fast_MA-point*_Point && Bid<=fast_MA && fast_MA<slow_MA && SymOrder() && Bid<last_order_price)
   {
      OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Bid+stop*_Point,Bid-take*_Point,NULL,Magic,0,clrRed);   
      last_order_price=Bid;
   }
      
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_BUY)
   {
      OrderClose(OrderTicket(),lot,Bid,slippage,clrWhite); 
      
   }
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_SELL)
   {
      OrderClose(OrderTicket(),lot,Ask,slippage,clrWhite);  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for(int i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return false;
      }

   return true;
}
 
Roman Sharanov:

EAでヘルプ、いつものように問題はおそらく些細なことですが、私は難問を解決していません

ema>smmaでemaから 買いを入れるか、そのポイントに達して いない場合(売りも同じ)。バーのクローズ時に取引を終了すること-新しいバーをオープンすること。同じように次のオープンをしますが、前のオープンの価格より 上の条件、つまりlast_order_priceを 指定します。

でも、結局は好きなところで開いて、好きなところで閉じる。(テスト開始時に開き、すぐに閉じる)。

どのように提案すればいいのでしょうか?コードをクリップボードに保存し、Expert Advisorに書き込んで、Strategy Testerで 実行する?まあ、開閉を確認しますよ。それがどうした?今日は土曜日、明日は日曜日、マーケットは お休みなので、デモで動かすかもしれません。目で見る必要があるのでしょうか?まあ、すべての変数の値を頭に入れておく必要がありますね。以前、鉛筆と紙でデバッグする方法があったのですが、それを試してみてください。また、Alert("Bid=", Bid, Fast+P=", Fast_Ema+point*_Point," ...) をすべてのOrderSelectと OrderCloseの前に置き、テスターで例えば2月19日から20日までの1日を設定し、テスト後にログを開いてコピーし不要行を消して分析することも可能です。また、MetaEditorはデバッグ機能も備えています。デバッグの方法を学ぶと ...は素晴らしいでしょう。
 

どこにボタンがあるのですか?

CSpinEdit コントロールで、#include <ControlsSpinEdit.mqh> (text field with increment)からテキストを整列させる方法を教えていただけませんか。

デフォルトでは左端に整列していますが、右端に整列させたいと思います。