新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 23 1...161718192021222324252627282930...1953 新评论 Artyom Trishkin 2016.11.30 09:46 #221 giannis1386:我完全糊涂了。double blevel=OrderStopLoss()<Bid-Point*TS; 对我有用。SL只追求价格上的利润。double slevel=OrderStopLoss()>Ask+Point*TS; 我不知道怎么把这个加到else中去。这不是一个bool。不是bool,但它被称为隐式转换你到底在做什么?拖网? giannis1386 2016.11.30 09:52 #222 Artyom Trishkin:不是bool,但它被称为隐式转换你到底在做什么?拖网? 是的,我试着做了一个拖网。原来的脚本只是在订单达到利润时关闭。 Artyom Trishkin 2016.11.30 10:58 #223 giannis1386: 是的,试图做一个拖网。原来的脚本只是在订单的利润达到时关闭。 不是脚本,是EA。你混淆了项目的类型。脚本在加载到图表上后被执行一次,然后被删除。如果它不是循环的。不太可能有人做一个循环的脚本来平仓。 Artyom Trishkin 2016.11.30 11:00 #224 giannis1386: 是的,我试图做一个拖网。逻辑。如果循环中选择的当前订单的利润大于设定值,如果其止损小于(买入)/大于(卖出)计算出的止损拖曳水平,则将止损转移到新值。这是一个简明的说法。 Alexey Viktorov 2016.11.30 11:12 #225 Artyom Trishkin: 这不正是我所建议的吗?是的,嗯...我很不专心地看了你的代码,不如说我根本就没看。但这是一半的麻烦,然后我说了这样的垃圾,我几乎感到羞愧。出于某种原因,我突然有了这个疯狂的想法,ArrayMaximum() 可能被应用于一个结构数组,甚至是这个数组的一个独立字段。我忏悔了,我不建议其他人这么想,这不起作用...:) Artyom Trishkin 2016.11.30 11:16 #226 Alexey Viktorov:是的,嗯...我很不专心地看了你的代码,不如说我根本就没看。但这是一半的麻烦,然后我说了这样的垃圾,我几乎感到羞愧。出于某种原因,我突然有了这个疯狂的想法,ArrayMaximum()可以应用于一个结构数组,甚至是这个数组的一个独立字段。我忏悔了,我不建议其他人这么想,这不起作用...:)嗯...那我呢? 我以同样的方式看了你的代码,并感谢你--它真的很短......简而言之--都值得一笑......。 giannis1386 2016.11.30 11:18 #227 Artyom Trishkin: 不是一个脚本,是一个专家顾问。你混淆了项目的类型。脚本在加载到图表上后被执行一次,然后被删除。如果它不是循环的。几乎没有人会做一个循环的脚本来关闭头寸。根据作者的说法。下面是一个稍加修改的标准MT4 close.mq4脚本将该文件放在MetaTrader/experts/Scripts文件夹中。 Alexey Viktorov 2016.11.30 11:24 #228 Artyom Trishkin:嗯...我呢? 就在我瞥见你的代码时,我鞠躬表示感谢--它真的很短......简而言之--都值得一笑......。不,我不同意。这个代码 double openCandle[], closeCandle[]; CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle); CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle); double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]); double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);经测试,可以使用。有简单的用户定义的双数组,而CopyRates()填充的是一个数组 结构,因此你不能通过使用处理数组的函数来选择最大和最小。 Artyom Trishkin 2016.11.30 11:28 #229 giannis1386:根据作者的说法。下面是一个稍加修改的标准MT4 close.mq4脚本将该文件放在MetaTrader/experts/Scripts文件夹中。所以他的脚本只起一次作用--我把它放在图表上,脚本起作用(平仓),然后卸载。你不需要脚本,你需要一个EA。 Artyom Trishkin 2016.11.30 11:29 #230 Alexey Viktorov:不,我不同意。这个代码 double openCandle[], closeCandle[]; CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle); CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle); double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]); double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);经过测试,可以使用。这里是简单的自定义双数组,CopyRates()填充了一个结构数组,因此你不能用数组函数选择最大和最小。好吧,我告诉你--我也在超级认真地观察你的代码。所以--这个笑话是关于我的。SZY......但我的代码返回四个值:高/低/最高/最低,你的代码只返回高和低,而且我的代码检查数据复制是否成功(虽然不是全部),你的代码没有......这就是我的代码如何检查所需数据的完整复制。//+------------------------------------------------------------------+//| sFindRangeByCandlesBody.mq4 |//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |//| https://login.mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"#property link "https://login.mql5.com/ru/users/artmedia70"#property version "1.00"#property strict#property script_show_inputs//--- input parametersinput int Begin=1; // Бар начала диапазона поискаinput int RangeBars=20; // Диапазон поиска//---int bars=Bars(Symbol(),PERIOD_CURRENT);int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);int rangeBars=(RangeBars<2?2: RangeBars>bars-begin?bars-begin: RangeBars); // Диапазон поиска//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() {//--- MqlRates array[]; double high=0, low=0; int highest=-1, lowest=-1; if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) { ArraySetAsSeries(array,true); high=GetHighestValue(begin,array,highest); low=GetLowestValue(begin,array,lowest); } Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest); }//+------------------------------------------------------------------+double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){ int sz=ArraySize(array); if(sz==0) return(-1); double high=DBL_MIN; bar_highest=-1; for(int i=0; i<sz; i++) { double value=fmax(array[i].open,array[i].close); if(value>high) { high=value; bar_highest=bar_begin+i; } } return(high);}//+------------------------------------------------------------------+double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){ int sz=ArraySize(array); if(sz==0) return(-1); double low=DBL_MAX; bar_lowest=-1; for(int i=0; i<sz; i++) { double value=fmin(array[i].open,array[i].close); if(value<low) { low=value; bar_lowest=bar_begin+i; } } return(low);}//+------------------------------------------------------------------+ Any questions from newcomers 初学者的问题 MQL5 MT5 MetaTrader question Regarding reading history 1...161718192021222324252627282930...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我完全糊涂了。
double blevel=OrderStopLoss()<Bid-Point*TS; 对我有用。SL只追求价格上的利润。
double slevel=OrderStopLoss()>Ask+Point*TS; 我不知道怎么把这个加到else中去。
这不是一个bool。
不是bool,但它被称为隐式转换
你到底在做什么?拖网?
不是bool,但它被称为隐式转换
你到底在做什么?拖网?
是的,试图做一个拖网。原来的脚本只是在订单的利润达到时关闭。
是的,我试图做一个拖网。
逻辑。
如果循环中选择的当前订单的利润大于设定值,如果其止损小于(买入)/大于(卖出)计算出的止损拖曳水平,则将止损转移到新值。
这是一个简明的说法。
这不正是我所建议的吗?
是的,嗯...我很不专心地看了你的代码,不如说我根本就没看。但这是一半的麻烦,然后我说了这样的垃圾,我几乎感到羞愧。出于某种原因,我突然有了这个疯狂的想法,ArrayMaximum() 可能被应用于一个结构数组,甚至是这个数组的一个独立字段。
我忏悔了,我不建议其他人这么想,这不起作用...:)
是的,嗯...我很不专心地看了你的代码,不如说我根本就没看。但这是一半的麻烦,然后我说了这样的垃圾,我几乎感到羞愧。出于某种原因,我突然有了这个疯狂的想法,ArrayMaximum()可以应用于一个结构数组,甚至是这个数组的一个独立字段。
我忏悔了,我不建议其他人这么想,这不起作用...:)
嗯...那我呢? 我以同样的方式看了你的代码,并感谢你--它真的很短......
简而言之--都值得一笑......。
不是一个脚本,是一个专家顾问。你混淆了项目的类型。脚本在加载到图表上后被执行一次,然后被删除。如果它不是循环的。几乎没有人会做一个循环的脚本来关闭头寸。
根据作者的说法。
下面是一个稍加修改的标准MT4 close.mq4脚本将该文件放在MetaTrader/experts/Scripts文件夹中。
嗯...我呢? 就在我瞥见你的代码时,我鞠躬表示感谢--它真的很短......
简而言之--都值得一笑......。
不,我不同意。这个代码
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
经测试,可以使用。有简单的用户定义的双数组,而CopyRates()填充的是一个数组 结构,因此你不能通过使用处理数组的函数来选择最大和最小。
根据作者的说法。
下面是一个稍加修改的标准MT4 close.mq4脚本将该文件放在MetaTrader/experts/Scripts文件夹中。
所以他的脚本只起一次作用--我把它放在图表上,脚本起作用(平仓),然后卸载。
你不需要脚本,你需要一个EA。
不,我不同意。这个代码
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
经过测试,可以使用。这里是简单的自定义双数组,CopyRates()填充了一个结构数组,因此你不能用数组函数选择最大和最小。
好吧,我告诉你--我也在超级认真地观察你的代码。所以--这个笑话是关于我的。
SZY......但我的代码返回四个值:高/低/最高/最低,你的代码只返回高和低,而且我的代码检查数据复制是否成功(虽然不是全部),你的代码没有......
这就是我的代码如何检查所需数据的完整复制。
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin=1; // Бар начала диапазона поиска
input int RangeBars=20; // Диапазон поиска
//---
int bars=Bars(Symbol(),PERIOD_CURRENT);
int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);
int rangeBars=(RangeBars<2?2:
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates array[];
double high=0, low=0;
int highest=-1, lowest=-1;
if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries(array,true);
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double high=DBL_MIN;
bar_highest=-1;
for(int i=0; i<sz; i++) {
double value=fmax(array[i].open,array[i].close);
if(value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return(high);
}
//+------------------------------------------------------------------+
double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double low=DBL_MAX;
bar_lowest=-1;
for(int i=0; i<sz; i++) {
double value=fmin(array[i].open,array[i].close);
if(value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return(low);
}
//+------------------------------------------------------------------+