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

 
Aleksandr Kononov #:
さて、メモリを確認する方法はあるのでしょうか?消費とかどうなんだろう?

例えば、メモリに影響を与えることができ、それは200の指標を計算しますが、1週間後にあなたはなぜ1000の指標をロードしていないことを尋ねることができます...等。悪循環...正しいタスクの設定...

 
Nikolay Ivanov #:

ハングアップしたコードはどこにも適用できません。できるタスクを設定して...。そして、コードを失敗しやすくなる...。指標は高速に動作しなければならず、超長時間の計算をしている暇はないのです。

何かが生み出される限界を知りたいですね。ましてや私はプログラマーではありませんから、どう扱えばいいのかわからないでしょう。さて、何か読むものはないかと探してみる。

 
Aleksandr Kononov #:

何かを生み出すための枠組みがわかればいいのですが。特に私は全くプログラマーではないので、初心者が理解するのは難しいです。よし、読んでみるか。

CCIは通常1つ、最大3つまでしか必要ありません。限界を超えないようにするのは難しい、経験が必要、適度な時間でうまく完了する正しい実現可能なタスクを設定する、難しいというのは同意します。例えば、期間20のCCIと期間21のCCI・・・ほとんど同じもので、両方計算する意味はありません。 期間が長くなればなるほど効果は少なくなるので、妥当な数字を探す必要があります。美しいソリューションは、常に迅速に動作します。

 
Nikolay Ivanov #:

CCIは通常1個で十分で、多くても3個です :) そして、200個あります...制限内に収めることの難しさについては、私も同感です。経験が必要で、適切で達成可能なタスクを設定するのは難しく、妥当な時間でうまく完了させることができるでしょう。例えば、期間20のCCIと期間21のCCI・・・ほとんど同じもので、両方計算する意味はありません。 期間が長くなればなるほど効果は少なくなるので、妥当な数字を探す必要があります。美しいソリューションは、常に迅速に動作します。

プロファイラを使えば、メモリの消費量を測定することができると理解しています。だから最適化するのです)。どなたか、どこで読めるかご存知の方、リンクを送ってください...。

 

みなさんこんにちは

MAを前方(正の値)だけでなく後方(負の値)にも移動させるために、コードに何を追加すべきかアドバイスしてください。

以下は、Expert Advisorのコードです。

// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input int     StopLoss      = 30;     // Стоп (SL)
input int     TakeProfit    = 30;     // Тейк (TP)
input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input double  K_Martin1     = 0.01;    // Множитель мартин 1
input double  K_Martin2     = 1.9;    // Множитель мартин 2
input double  K_Martin3     = 1.4;    // Множитель мартин 3
input int     OrdersClose   = 3;      // Ограничение лотности мартин1
input int     OrdersClose2  = 5;      // Ограничение лотности мартин2
input int     DigitsLot     = 2;      // Точность лотности
// Параметры индикатора
input string  sParametersMA = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
Start          = TimeCurrent();
MaxMartinLot   = Lot*MathPow(1.4,OrdersClose);
MaxMartinLot2  = Lot*MathPow(K_Martin2,OrdersClose2);
int Y          = 15;
DrawLABEL("nextlot",1,5,Y,clrLime,""); 
Y += 20;
DrawLABEL("currentlot",1,5,Y,clrLime,"");
Y += 30;
return(INIT_SUCCEEDED);
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Пишем какой лот текущий и какой следующий
      DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
      DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
 
   }
 
законопослушный гражданин #:

みなさんこんにちは

MAを前方(正の値)だけでなく後方(負の値)にも移動させるために、コードに何を追加すべきかアドバイスしてください。

以下は、Expert Advisorのコードです。

シフトに希望する負の値を加えますが、値+シフトはゼロ以下である必要があります。

 
ALEKSANDR SOKOLOV #:

シフトに必要な負の値を加えますが、値+シフトが少なくとも0であることを確認します。

ありがとうございます、試してみます。

 

こんにちは。

コードのヘルプ、もしかしたら例があるかもしれません。
タスク

異なるロットで、異なる方向に、いくつかのオープンオーダーがあります。一人は利益で埋まっている、仮に20人とする。しかし、マイナスの利益でオープンオーダーがあり、0.05ロットで-55とします。マイナス注文の一部をプラスで決済した注文の利益分だけ決済して、ドローダウンを減少させたい。

while演算子を使って書いてみたのですが、うまくいきませんでした。

よろしくお願いします。

 

こんにちは、このコードはFedoseevの本から引用しています。ログには実行中とあり、コンパイル中のエラーもなく、追加のウィンドウが開きます(空です)。どうしたんですか?

//+------------------------------------------------------------------+

//| 015 シンボル.mq5

//+------------------------------------------------------------------+

#property copyright "Dmitry Fedoseev" (ドミトリー・フェドセーエフ)

#プロパティリンク "mailto:for-good-letter@yandex.ru"

#property version "1.00"

#property indicator_separate_window

#プロパティ indicator_buffers 4

#property indicator_plots 1

//--- プロットバー

#property indicator_label1 "bar"

#property indicator_type1 DRAW_CANDLES

#property indicator_color1 clrGray,clrBlue,clrRed

#property indicator_style1 STYLE_SOLID

#property indicator_width1 1

//--- 入力パラメータ


入力文字列 symbol="";

入力 bool drawBars=false;


文字列sym;


//--- インジケータ・バッファ

double barBuffer1[]。

double barBuffer2[];

double barBuffer3[]。

double barBuffer4[]。

//+------------------------------------------------------------------+

//| カスタムインジケータ初期化関数

//+------------------------------------------------------------------+

int OnInit()

{

sym=symbol です。

StringTrimLeft(sym);

StringTrimRight(sym);

if(sym=="") {

sym=Symbol()です。

}

if(!SymbolSelect(sym,true) ){。

Alert("不明なシンボル",sym);

return(INIT_FAILED);

}

if(drawBars){。

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);

}

else{

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);

}

//--- インジケータ・バッファのマッピング

SetIndexBuffer(0,barBuffer1,INDICATOR_DATA)を設定します。

SetIndexBuffer(1,barBuffer2,INDICATOR_DATA)を設定します。

SetIndexBuffer(2,barBuffer3,INDICATOR_DATA)を設定します。

SetIndexBuffer(3,barBuffer4,INDICATOR_DATA)を設定。

//---

return(INIT_SUCCEEDED);

}


void OnDeinit(const int r){.

Comment(")です。

EventKillTimer()。

}

//+------------------------------------------------------------------+

//| カスタムインジケータ反復関数

//+------------------------------------------------------------------+

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[])

{

int bars=Bars(sym,Period());

if(bars=0){。

Comment("タイムフレームの形成",sym,"...);

EventSetTimer(1);

return(0)です。

}

int startです。

if(prev_calculated==0){。

Comment(")です。

EventKillTimer()。

datetime tm[1];

if(CopyTime(sym,Period(),bars-1,1,tm)==-1){.

return(0)です。

}

start=0とする。

for(;start<rates_total;start++){。

if(time[start]>=tm[0]){

が壊れる。

}

}

}

else{

start=prev_calculated-1。

}

MqlRates r[1];

for(int i=start;i<rates_total;i++){。

if(CopyRates(sym,Period(),time[i],1,r)==-1){とする。

return(0)です。

}

barBuffer1[i]=r[0].open;

barBuffer2[i]=r[0].high;

barBuffer3[i]=r[0].low;

barBuffer4[i]=r[0].closeとする。

}

return(rates_total);

}


void OnTimer()

{

ChartSetSymbolPeriod(0,Symbol(),Period())。

}


//+------------------------------------------------------------------+

ファイル:
 
MatveySt #:

こんにちは、このコードはFedoseevの本から引用しています。ログには実行中とあり、コンパイル時にはエラーはなく、追加のウィンドウが開きます(空です)。どうしたんですか?


Altキーを押しながらコードを貼り付けてください。

また、インダクターを鋳造する際に、工具を入力するのでしょうか?

理由: