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

 
メタトレーダー5がこれまでの4とどう違うかというと、作業がしにくいかどうかです。どのブローカーもこれらのプログラムを提供していますが、なぜすべてのブローカーに1つのプログラムがないのでしょうか。
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
  • es-blogy.ru
Если вами соблюдается диета при язве, то это поможет вам избежать частых обострений и свести их к минимуму; а чем меньше обострений, тем меньше количество медикаментозных препаратов вам нужно принимать. Инфекцию Н. pylori можно обнаружить двумя способами: провести анализ крови; анализ желудочного сока. Эндоскопическое или радиологическое...
 
koctik:
メタトレーダー5がこれまでの4とどう違うかというと、作業がしにくいかどうかです。どのブローカーもこれらのプログラムを提供していますが、なぜすべてのブローカーに1つのプログラムがないのか、そうすれば多くのプログラムをインストールする必要がありません。
両端末をダウンロードし、デモ口座で動作させて、ご自身でお確かめください。
 

最後に閉じた 位置の結果 (プラスまたはマイナス)を返す関数を作ろうとしています。この機能は多通貨のExpert Advisor用に設計されており、すべての通貨ペアの中から最後に 決済したポジションを選択する必要がありますが、私はこの機能でいくつかの問題を抱えています。機能を修正できますか?

double last_profit()
{  
int dir = 0;
double prof = 0;
ulong d_ticket;

if (HistorySelect(0,TimeCurrent())) 
    {
       int j=HistoryDealsTotal()-1;
       if(j>0)
      {
         d_ticket = HistoryDealGetTicket(j);
         if (d_ticket>0)
         { 
         mydeal.Ticket(d_ticket);          
         prof = mydeal.Profit();
         }
       }
     }
if(prof < 0)dir = -1;
if(prof > 0)dir = 1;
if(prof == 0)dir =0;

return(dir);
} 

 
Automated-Trading:

OBJ_ALL_PERIODS=2097151

ありがとう、でもうまくいかなかった。問題は、D1や......期間の計算がすべてのタイムフレームで表示されるはずなのに、そのまま実行されて出てこないことです。どうすればいいのか?
ファイル:
macd2.mq5  4 kb
 
Reshetov:

クラスで使われていないメソッドとはどういう意味ですか?OOPではこのようなことはありません。アルゴリズムによるプログラミングとは対照的に、通常のOOPプログラマーは、同じクラスが後に他のアプリケーションで使われたり、クラスライブラリの一部になる可能性があるため、あらゆる場面で必要なフィールドとメソッドを備えたクラスを作成する。もちろん、1つのプロジェクト内であっても、ソースコードを探し出して必要なフィールドやメソッドを後から追加する必要がないように、削ぎ落としたものではなく、完全なクラスを作成した方が良いのは言うまでもありません。

OOPではどんな経済性も、アルゴリズムプログラミングでは多くの人が慣れるが、後で不利になることがある。使わないものはすべて、プログラマーではなく、コンパイラがコードから除外しなければならない。

もちろん、OOPはアルゴリズムプログラミングと比較して、ソースコードが大きくなります。しかし、これは欠点ではなく、あるプロジェクトの「不要な」コードの多くを他のプロジェクトで再利用できるという利点があるのです。

1つのクラスですべてをまかなうという、難問に挑戦する必要はない。クラスライブラリを作ること、つまり機能を別々のクラスに分けること、そしてこの領分にコメントを加えることを忘れなければ、すべてがうまくいくでしょう。私もPascalの後にJavaを学び始めた当初は、アルゴリズムプログラミングのように、あるタスクに必要なものをすべて1つのクラスにしてしまう、つまりOOPを 使わないで、すべてを1つのクラスにしてしまおうとしました。その結果、ユニバーサルではない混乱が生じ、後でどこにでも適用することは不可能であり、そのようなコードを理解することが困難であることは言うまでもない。

そのあたりはよく理解しています。しかし、せめてVisualStudioで行われているような使用されないプライベート変数を示すことはできないでしょうか。

ポイントは、開発プロセスでクラスを設計することです。創造以前のすべてを考慮することはできないのです。そのため、できるだけ機能を絞ったフレームクラスが作られるのです。これらのフレームワーククラスと対話しながら、全体のアーキテクチャが練られていきます。あるメソッドは単に削除され、あるメソッドはプライベートセクションに移動し、あるクラスから別のクラスへ移行されます。その過程で、どうしても忘れ去られた変数やメソッド、さらにはクラス全体が現れてしまうのだ。これは、オカマの原理が働いているようなもので、まず、悪い冗長なコードを書くのだから、当たり前だ。そして、タスクをより明確に形式化し、いくつかのエンティティは単純に消滅します。冗長性は無に帰す。そして、このプロセスにおいて、コンパイラのヘルプは非常に有用です。未使用の変数や、少なくともプライベートなメソッドを確認することができれば、非常に便利です。

 

こんにちは。

インジケータで使用して いる関数OnCalculate()は、それ自体で、つまり価格変動イベントなしで生成さ れることは理解しています。

価格変動イベントが発生したときのみ生成するインジケーターで適用できる機能は何ですか?ありがとうございました。

 
Vikon:

こんにちは。

インジケータで使用して いる関数OnCalculate()は、それ自体で、つまり価格変動イベントなしで生成さ れることは理解しています。

価格変動イベントが発生したときのみ生成するインジケーターで適用できる機能は何ですか?ありがとうございました。

CalculateイベントはInitイベントの直後や価格データの 変更時にインジケータ用に生成さ れます。OnCalculate 関数で処理されます。履歴が変更されたとき(履歴がページングされているとき)、このイベントはOnCalculateも 生成します

OnCalculateは インジケーターにとって最も重要な機能で、価格データが変更された場合、すべてのインジケーターの計算が実行されます。

 
barabashkakvn:

CalculateイベントはInitイベントが送信された直後と、価格データの変更時にインジケータに対してのみ生成さ れます。このイベントはOnCalculate 関数で処理されます。履歴の変更時(ページング時)にも同じOnCalculateが生成 されます

OnCalculateは インジケーターにとって最も重要な機能で、価格データが変更された場合にインジケーターのすべての計算が実行されます。

ここではいくつかのループを持ち、つまり常に生成し、周期が変わると読みが変わるようになっている。エラーは何ですか?

#property copyright "Copyright 2014, MetaQuotes Software Corp.
#プロパティリンク "http://www.mql5.com"
#property version "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数

int EMA1=12;
int EMA2=26;
int SMA=9;

ENUM_TIMEFRAMES period_macd;
datetime t_MACD[];
double MACD[];
bool high_low=false。
int shift_nachalo;
double w_MACD[]; d_MACD[];
int w_MACD_handle,d_MACD_handle;

int barDown=0;
int barUP=0;

//+------------------------------------------------------------------+ return(0);
int OnInit()
{
w_MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA2,SMA,PRICE_CLOSE)となります。
d_MACD_handle=iMACD(NULL,PERIOD_D1,EMA1,EMA2,SMA,PRICE_CLOSE)となります。
ArraySetAsSeries(MACD,true)。
ArraySetAsSeries(t_MACD,true)。
ArraySetAsSeries(w_MACD,true)。
ArraySetAsSeries(d_MACD,true)。
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA1,SMA,PRICE_CLOSE);
//| カスタムインジケータ反復関数
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{

ObjectsDeleteAll(0,0,-1)。
period_macd=PERIOD_D1;
CopyBuffer(d_MACD_handle,0,0,1000,d_MACD)。
ArrayCopy(MACD,d_MACD,0,0,WHOLE_ARRAY)です。
nachalo()です。
ObjectCreate(0, "lin_2",OBJ_VLINE,0,t_MACD[shift_nachalo],0) を実行します。
ObjectSetInteger(0, "lin_2",OBJPROP_BACK,true) を使用します。
ObjectSetInteger(0, "lin_2",OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS) を使用します。
ObjectSetInteger(0, "lin_2",OBJPROP_COLOR,clrYellow) を使用します。
ObjectSetInteger(0, "lin_2",OBJPROP_STYLE,1) を使用します。
return(rates_total);
}
//+------------------------------------------------------------------+
void nachalo() //新しい波の始まり
{
double low_nachalo[],high_nachalo[]。
CopyTime(NULL,period_macd,0,1000,t_MACD)です。
if (MACD[1]>0)
{high_low=false。
while (MACD[barDown]>0)とする。
{barDown++;}
barUP=barDownです。
while (MACD[barUP]<0)
{バーアップ++;}。
CopyLow(NULL,period_macd,0,barUP,low_nachalo)。
ArraySetAsSeries(low_nachalo,true)。
shift_nachalo=ArrayMinimum(low_nachalo,barDown-1,barUP-(barDown-1));
}
if (MACD[1]<0)
{high_low=true。
while (MACD[barUP]<0)
{バーアップ++;}。
barDown=barUP;
while (MACD[barDown]>0)とする。
{barDown++;}
CopyHigh(NULL,period_macd,0,barDown,high_nachalo)。

ArraySetAsSeries(high_nachalo,true)。

shift_nachalo=ArrayMaximum(high_nachalo,barUP-1,barDown-(barUP-1))。
}}
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
ファイル:
macd2.mq5  4 kb
 
Vikon:

ここでループが発生する、つまり常に発電していて、周期が変わると読みが変わるのです。エラーは何ですか?


フォーラムでコードを 正しく挿入 する方法。

 
Vikon:


エラーに注意してください。

テザー付きインジケーターバッファーなし

使用する。

//---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer()
また、「MQL5でインジケーターを書く方法」の記事もご覧ください。



理由: