新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1941 1...193419351936193719381939194019411942194319441945194619471948...1953 新评论 Nikolay Ivanov 2022.04.03 15:05 #19401 Aleksandr Kononov #: 那么,有什么办法可以检查内存吗?它是如何被消费的还是什么? 比方说,你可以影响内存,它将计算200个指标,但一周后你会问为什么1000个指标没有加载...等等。恶性循环...设定正确的任务... Aleksandr Kononov 2022.04.03 15:11 #19402 Nikolay Ivanov #:被挂起的代码不能在任何地方应用......你必须设定可以完成的任务...而且更容易搞砸代码...指标必须快速工作,没有时间进行超长的计算。 我希望我知道可以创造的东西的限度。更何况我根本就不是一个程序员,我不会知道如何处理。好吧,我将寻找一些东西来阅读 Nikolay Ivanov 2022.04.03 15:21 #19403 Aleksandr Kononov #:我希望我知道我可以在其中创造什么的框架。初学者很难理解,尤其是我根本就不是一个程序员。好吧,我看看我能读到什么。 你通常只需要一个CCI,最多3个 :) 而且你有200...我同意,不越界是很难的,这需要经验,要设定正确的、可行的任务,在合理的时间内顺利完成--这很难。因此,如果你需要关于在哪里挖掘的建议,你应该专注于优化和最小化的想法......例如,周期为20的CCI和周期为21的CCI......几乎是同样的事情,计算它们两个是没有意义的。 周期越高,影响越小,你需要找到一个合理的数字。一个漂亮的解决方案总是能快速发挥作用。 Aleksandr Kononov 2022.04.03 15:35 #19404 Nikolay Ivanov #:好吧,通常一个CCI就够了,最多3个:),你有200...我同意你说的保持在限度内的困难......你需要经验,很难设定正确的、可实现的任务,这将在合理的时间内成功完成。因此,如果你需要关于在哪里挖掘的建议,你应该专注于优化和最小化的想法......例如,周期为20的CCI和周期为21的CCI......几乎是同样的事情,计算它们两个是没有意义的。 周期越高,影响越小,你需要找到一个合理的数字。一个漂亮的解决方案总是能快速发挥作用。 我知道剖析器将有助于测量内存消耗。所以我们将优化它)。所有这些,如果有人知道在哪里可以读到,请把链接发给我......。 законопослушный гражданин 2022.04.03 16:22 #19405 大家好! 请告诉我们应该在代码中加入什么,以使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))); } ALEKSANDR SOKOLOV 2022.04.04 09:07 #19406 законопослушный гражданин #:大家好!请告诉我们应该在代码中加入什么,以使MA不仅向前移动(正值),而且向后移动(负值)。下面是专家顾问的代码。 在移位上加上所需的负值,但值+移位不应小于零。 законопослушный гражданин 2022.04.04 09:46 #19407 ALEKSANDR SOKOLOV #:将所需的负值加入移位,但要确保值+移位至少为零。 谢谢,我会试一试的。 Maksim Burov 2022.04.05 06:37 #19408 下午好。 帮忙写写代码,也许有例子。 任务。 有几个开放的订单,不同的手数,不同的方向。其中一个人被埋葬的利润,让我们假设为20。然而,有一个负利润的未平仓订单,让我们假设-55,0.05手。我想关闭一个负数订单的一部分,其金额相当于一个正数订单的利润,以减少缩减。 我曾试图用while运算符来写这个,但并不顺利。 预先感谢你。 MatveySt 2022.04.05 08:36 #19409 你好,这段代码来自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())。 } //+------------------------------------------------------------------+ 附加的文件: 015_Symbol1.mq5 7 kb Any questions from newcomers 帮助升级到MetaTrader 5而没有损失 编码帮助 Valeriy Yastremskiy 2022.04.05 08:59 #19410 MatveySt #:你好,这段代码来自Fedoseev的书。为什么指标没有在窗口中画出来,日志中说它在运行,编译时没有错误,另外一个窗口打开了(空的),这段代码是书上的,与我的结果完全一样。有什么问题吗? Alt's粘贴代码。 而当你铸造电感时,你是否输入工具? 1...193419351936193719381939194019411942194319441945194619471948...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么,有什么办法可以检查内存吗?它是如何被消费的还是什么?
比方说,你可以影响内存,它将计算200个指标,但一周后你会问为什么1000个指标没有加载...等等。恶性循环...设定正确的任务...
被挂起的代码不能在任何地方应用......你必须设定可以完成的任务...而且更容易搞砸代码...指标必须快速工作,没有时间进行超长的计算。
我希望我知道可以创造的东西的限度。更何况我根本就不是一个程序员,我不会知道如何处理。好吧,我将寻找一些东西来阅读
我希望我知道我可以在其中创造什么的框架。初学者很难理解,尤其是我根本就不是一个程序员。好吧,我看看我能读到什么。
你通常只需要一个CCI,最多3个 :) 而且你有200...我同意,不越界是很难的,这需要经验,要设定正确的、可行的任务,在合理的时间内顺利完成--这很难。因此,如果你需要关于在哪里挖掘的建议,你应该专注于优化和最小化的想法......例如,周期为20的CCI和周期为21的CCI......几乎是同样的事情,计算它们两个是没有意义的。 周期越高,影响越小,你需要找到一个合理的数字。一个漂亮的解决方案总是能快速发挥作用。
好吧,通常一个CCI就够了,最多3个:),你有200...我同意你说的保持在限度内的困难......你需要经验,很难设定正确的、可实现的任务,这将在合理的时间内成功完成。因此,如果你需要关于在哪里挖掘的建议,你应该专注于优化和最小化的想法......例如,周期为20的CCI和周期为21的CCI......几乎是同样的事情,计算它们两个是没有意义的。 周期越高,影响越小,你需要找到一个合理的数字。一个漂亮的解决方案总是能快速发挥作用。
我知道剖析器将有助于测量内存消耗。所以我们将优化它)。所有这些,如果有人知道在哪里可以读到,请把链接发给我......。
大家好!
请告诉我们应该在代码中加入什么,以使MA不仅向前移动(正值),而且向后移动(负值)。
下面是专家顾问的代码。
大家好!
请告诉我们应该在代码中加入什么,以使MA不仅向前移动(正值),而且向后移动(负值)。
下面是专家顾问的代码。
在移位上加上所需的负值,但值+移位不应小于零。
将所需的负值加入移位,但要确保值+移位至少为零。
谢谢,我会试一试的。
下午好。
帮忙写写代码,也许有例子。
任务。
有几个开放的订单,不同的手数,不同的方向。其中一个人被埋葬的利润,让我们假设为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())。
}
//+------------------------------------------------------------------+
你好,这段代码来自Fedoseev的书。为什么指标没有在窗口中画出来,日志中说它在运行,编译时没有错误,另外一个窗口打开了(空的),这段代码是书上的,与我的结果完全一样。有什么问题吗?
Alt's粘贴代码。
而当你铸造电感时,你是否输入工具?