新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1941

 
Aleksandr Kononov #:
那么,有什么办法可以检查内存吗?它是如何被消费的还是什么?

比方说,你可以影响内存,它将计算200个指标,但一周后你会问为什么1000个指标没有加载...等等。恶性循环...设定正确的任务...

 
Nikolay Ivanov #:

被挂起的代码不能在任何地方应用......你必须设定可以完成的任务...而且更容易搞砸代码...指标必须快速工作,没有时间进行超长的计算。

我希望我知道可以创造的东西的限度。更何况我根本就不是一个程序员,我不会知道如何处理。好吧,我将寻找一些东西来阅读

 
Aleksandr Kononov #:

我希望我知道我可以在其中创造什么的框架。初学者很难理解,尤其是我根本就不是一个程序员。好吧,我看看我能读到什么。

你通常只需要一个CCI,最多3个 :) 而且你有200...我同意,不越界是很难的,这需要经验,要设定正确的、可行的任务,在合理的时间内顺利完成--这很难。因此,如果你需要关于在哪里挖掘的建议,你应该专注于优化和最小化的想法......例如,周期为20的CCI和周期为21的CCI......几乎是同样的事情,计算它们两个是没有意义的。 周期越高,影响越小,你需要找到一个合理的数字。一个漂亮的解决方案总是能快速发挥作用。

 
Nikolay Ivanov #:

好吧,通常一个CCI就够了,最多3个:),你有200...我同意你说的保持在限度内的困难......你需要经验,很难设定正确的、可实现的任务,这将在合理的时间内成功完成。因此,如果你需要关于在哪里挖掘的建议,你应该专注于优化和最小化的想法......例如,周期为20的CCI和周期为21的CCI......几乎是同样的事情,计算它们两个是没有意义的。 周期越高,影响越小,你需要找到一个合理的数字。一个漂亮的解决方案总是能快速发挥作用。

我知道剖析器将有助于测量内存消耗。所以我们将优化它)。所有这些,如果有人知道在哪里可以读到,请把链接发给我......。

 

大家好!

请告诉我们应该在代码中加入什么,以使MA不仅向前移动(正值),而且向后移动(负值)。

下面是专家顾问的代码。

// Параметры советника
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不仅向前移动(正值),而且向后移动(负值)。

下面是专家顾问的代码。

在移位上加上所需的负值,但值+移位不应小于零。

 
ALEKSANDR SOKOLOV #:

将所需的负值加入移位,但要确保值+移位至少为零。

谢谢,我会试一试的。

 

下午好。

帮忙写写代码,也许有例子。
任务。

有几个开放的订单,不同的手数,不同的方向。其中一个人被埋葬的利润,让我们假设为20。然而,有一个负利润的未平仓订单,让我们假设-55,0.05手。我想关闭一个负数订单的一部分,其金额相当于一个正数订单的利润,以减少缩减。

我曾试图用while运算符来写这个,但并不顺利。

预先感谢你。

 

你好,这段代码来自Fedoseev的书。为什么指标没有在窗口中画出来,日志中说它在运行,编译时没有错误,另外一个窗口打开(空的),这段代码是书上的,与我的结果完全一样。有什么问题吗?

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

//| 015 Symbol.mq5 | |

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

#财产版权 "Dmitry Fedoseev"

#属性链接 "mailto:for-good-letter@yandex.ru"

#财产版本 "1.00"

#属性 indicator_separate_window

#property indicator_buffers 4

#property indicator_plots 1

//-------- 绘图条

#property indicator_label1 "bar"

#属性 indicator_type1 DRAW_CANDLES

#property indicator_color1 clrGray, clrBlue, clrRed

#property indicator_style1 STYLE_SOLID

#property indicator_width1 1

//----输入参数


输入字符串符号=""。

输入bool drawBars=false。


串的符号。


//----指标缓冲区

double barBuffer1[];

double barBuffer2[]。

double barBuffer3[]。

double barBuffer4[]。

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

//|自定义指标初始化功能

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

int OnInit()

{

sym=符号。

StringTrimLeft(sym)。

StringTrimRight(sym)。

如果(sym==""){

sym=Symbol()。

}

if(!SymbolSelect(sym,true)){

Alert("未知符号",sym)。

return(INIT_FAILED)。

}

如果(drawBars){

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS)。

}

否则{

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)。

}


空白的OnDeinit(const int r){

评论(")。

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())。

如果(bar==0){

Comment("形成时间框架",sym," ;)

EventSetTimer(1);

return(0);

}

int start。

如果(prev_calculated==0){

评论(")。

EventKillTimer()。

datetime tm[1];

如果(CopyTime(sym,Period(),bar-1,1,tm)==-1){

return(0);

}

start=0。

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

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

突破。

}

}

}

否则{

start=prev_calculated-1。

}

MqlRates r[1];

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

如果(CopyRates(sym,Period(),time[i],1,r)==-){

return(0);

}

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

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

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

barBuffer4[i]=r[0].close。

}

return(rate_total)。

}


空白的OnTimer()

{

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

}


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

附加的文件:
 
MatveySt #:

你好,这段代码来自Fedoseev的书。为什么指标没有在窗口中画出来,日志中说它在运行,编译时没有错误,另外一个窗口打开了(空的),这段代码是书上的,与我的结果完全一样。有什么问题吗?


Alt's粘贴代码。

而当你铸造电感时,你是否输入工具?

原因: