新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 135 1...128129130131132133134135136137138139140141142...1953 新评论 zsu1970 2017.02.27 14:14 #1341 Vitaly Muzichenko: 你是一次性把价格放进去,还是先拿到价格,然后再放进去计算?维塔利-穆齐琴科。 你是一次性设定价格,还是拿到价格后再粘贴到计算中? int k=period。 for(int i=1; i<=period; i++){ H1_Close[i]=Close[k]; k--;} 我从timesession中抽取了一块相当于从最后一个闭合的条形图开始的时间,并在数组中翻转,因为1是timesession中的倒数第二条,计算必须从第i条开始。 也就是说,我的函数应该返回最后一个收盘条的SMMA值。 ANDREY 2017.02.27 14:17 #1342 大家下午好。 下面的代码编码了一个简单的想法。 如果最后关闭的订单是在SEL 如果最后关闭的订单在NEL上 打开一个NEL订单if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY)) if ( OrderType ()==OP_SELL) X = OrderProfit( ); if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY)) if ( OrderType ()==OP_BUY) if(X < 0) OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 ); 问题 在这段代码中,可以用什么语言结构来增加两个条件(红色圈出)? 如果最后关闭的订单是NEL如果最后一个CEL订单关闭 如果最后一个关闭的订单已经在NEL上关闭如果最后一个关闭的订单已经在SL谢谢你的帮助。 如果你能写出代码,而不仅仅是解释要做什么,我将非常感激。 初学者的问题 MQL5 MT5 MetaTrader Questions from Beginners MQL5 Any questions from newcomers 0B53RV3R 2017.02.27 15:12 #1343 你好。我正在写一个脚本来删除所有的挂单。然而,它只删除了一个订单。我总是有两个待处理的订单或一个。在这两种情况下,它只删除一个买入止损点。要删除卖出止损,你必须再次运行脚本,只要没有其他买入止损订单。请告知错误在哪里。空白 删除订单(){int Total=OrdersTotal()。for(int i=0;i<Total;i++)如果(OrderSelect(i,SELECT_BY_POS)){int type=OrderType(),ticket=OrderTicket()。bool c;switch(type){案例4:c=OrderDelete(ticket)。if(!c)Print(GetLastError())。突破。案例5:c=OrderDelete(ticket)。if(!c)Print(GetLastError())。突破。}}} Any questions from newcomers Determine Order Status KimIV的有用功能 Maxim Kuznetsov 2017.02.27 15:18 #1344 0B53RV3R: 你好。我正在写一个脚本来删除所有的挂单。然而,它只删除了一个订单。我总是有两个待处理的订单或一个。在这两种情况下,它只删除一个买入止损点。要删除卖出止损,你必须再次运行脚本,只要没有其他买入止损订单。请告知错误的位置。空白 删除订单(){int Total=OrdersTotal()。for(int i=0;i<Total;i++)如果(OrderSelect(i,SELECT_BY_POS)){int type=OrderType(),ticket=OrderTicket()。bool c;switch(type){案例4:c=OrderDelete(ticket)。if(!c)Print(GetLastError())。突破。案例5:c=OrderDelete(ticket)。if(!c)Print(GetLastError())。突破。}}} 改变搜索的方向 for(i=total-1;i>=0;i--) 0B53RV3R 2017.02.27 15:48 #1345 Maxim Kuznetsov: 改变搜索方向 for(i=total-1;i>=0;i--) 谢谢你,现在可以了。我的理解是否正确,当索引为0的订单被删除时,索引为1的订单被分配索引为0,在下一次迭代时i == 1,而没有这样的订单。你能告诉我是否是这种情况吗? Artyom Trishkin 2017.02.27 15:49 #1346 0B53RV3R: 谢谢你,现在可以了。我的理解是否正确,当一个索引为0的订单被删除时,一个索引为1的订单被分配了索引0,在下一次迭代时i == 1,没有这样的订单出现。你能告诉我是否是这种情况吗? 对。 Vitaly Muzichenko 2017.03.03 04:57 #1347 有一个可定制的分形功能,嗯,天哪,这太重了。我只留下了画物体的部分,以直观地显示分形是否正确形成--这是不可能的。问题:我们怎样才能使它更容易,因为视觉测试 是愚蠢的。extern int FrLeft=15; // Баров слеваextern int FrRight=5; // Баров справа//-----------------------------------------------------------------------------------------------void OnTick() { int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара double FrHigh = High[nFrUp]; // Цена верхнего фрактала double FrLow = Low [nFrDn]; // Цена нижнего фрактала SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM); SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP); // Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn); }//----------------------------------------------------------------------------------------------+//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+//----------------------------------------------------------------------------------------------+int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) { int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars; double _high[], _low[]; nLeft=nLeft<=2?2:nLeft; nRight=nRight<=2?2:nRight; equals=nLeft+nRight; bars=Bars(symb,tf)-equals; ArraySetAsSeries(_high,true); ArraySetAsSeries(_low,true); for(pos=nRight+1; pos<bars; pos++) { r=nRight; if(mode==MODE_UPPER) { CopyHigh(symb,tf,0,pos+equals+1,_high); for(i=1; i<=r; i++) { if(_high[pos]<=_high[pos-i]) break; }} if(mode==MODE_LOWER) { CopyLow(symb,tf,0,pos+equals+1,_low); for(i=1; i<=r; i++) { if(_low[pos]>=_low[pos-i]) break; }} //-- if(i==r+1) { l=nLeft; e=equals; for(int j=1; j<=l+equals; j++) { if(mode==MODE_UPPER) { if(_high[pos]<_high[pos+j]) break; if(_high[pos]>_high[pos+j]) l--; if(_high[pos]==_high[pos+j]) e--; } if(mode==MODE_LOWER) { if(_low[pos]>_low[pos+j]) break; if(_low[pos]<_low[pos+j]) l--; if(_low[pos]==_low[pos+j]) e--; } if(l==0) { cn++; if(cn>numFr) return(pos); } //-- if(e<0) break; }} } Print(__FUNCTION__": Фрактал не найден"); return(0); }//----------------------------------------------------------------------------------------------+//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+//----------------------------------------------------------------------------------------------+void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed, int code=252, int width=1, int anchor=0) { if(ObjectFind(0,nm)==-1) { ObjectCreate(0,nm,OBJ_ARROW,0,0,0); ObjectSetInteger(0,nm,OBJPROP_COLOR,col); ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code); ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor); ObjectSetInteger(0,nm,OBJPROP_WIDTH,width); ObjectSetInteger(0,nm,OBJPROP_SELECTED,false); ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true); ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false); ObjectSetDouble(0,nm,OBJPROP_PRICE,p1); ObjectSetInteger(0,nm,OBJPROP_TIME,t1); } }谢谢! Any questions from newcomers [ARCHIVE]Any rookie question, so 专家顾问 - 杂项问题 Alexey Viktorov 2017.03.03 07:09 #1348 Vitaly Muzichenko:有一个可定制的分形功能,嗯,天哪,这太重了。我只留下了画物体的部分,以直观地显示分形是否正确形成--这是不可能的。问题:我怎样才能使它更容易,因为目测 它是很愚蠢的。谢谢! 你只能通过把它全部变成一个指标来使它更容易。即使是图表左上角的评论,特别是测试者自己放的仓位 开仓和平仓 标记,也会拖慢测试的速度。 Andy-D 2017.03.03 09:11 #1349 你好。您能给新来的人一些建议吗?这里有一个例子。如果(Condition1)如果(Condition2){}否则{}根据代码,Else应该指的是if(condition1),如果condition1不被满足,将被执行。 但事实上,如果Condition2不被满足,它也会被执行。 Alekseu Fedotov 2017.03.03 09:27 #1350 Andy-D:你好。您能给新来的人一些建议吗?这里有一个例子。如果(Condition1)如果(Condition2){}否则{}根据代码,Else应该指的是if(condition1),如果condition1不被满足,将被执行。 但事实上,如果Condition2不被满足,它将被执行。 有条件的立即养成放卷曲牙套的习惯如果(Condition){}A 根据你的问题 if(Условие1) { if(Условие2) { } } else { } 1...128129130131132133134135136137138139140141142...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你是一次性把价格放进去,还是先拿到价格,然后再放进去计算?
你是一次性设定价格,还是拿到价格后再粘贴到计算中?
for(int i=1; i<=period; i++)
{
H1_Close[i]=Close[k];
k--;
}
我从timesession中抽取了一块相当于从最后一个闭合的条形图开始的时间,并在数组中翻转,因为1是timesession中的倒数第二条,计算必须从第i条开始。
也就是说,我的函数应该返回最后一个收盘条的SMMA值。
下面的代码编码了一个简单的想法。
如果最后关闭的订单是在SEL
如果最后关闭的订单在NEL上
打开一个NEL订单
if ( OrderType ()==OP_SELL)
X = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_BUY)
if(X < 0)
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );
问题
在这段代码中,可以用什么语言结构来增加两个条件(红色圈出)?
如果最后关闭的订单是NEL
如果最后一个CEL订单关闭
如果最后一个关闭的订单已经在NEL上关闭
如果最后一个关闭的订单已经在SL
谢谢你的帮助。
如果你能写出代码,而不仅仅是解释要做什么,我将非常感激。
你好。我正在写一个脚本来删除所有的挂单。然而,它只删除了一个订单。我总是有两个待处理的订单或一个。在这两种情况下,它只删除一个买入止损点。要删除卖出止损,你必须再次运行脚本,只要没有其他买入止损订单。请告知错误的位置。
改变搜索方向 for(i=total-1;i>=0;i--)
谢谢你,现在可以了。我的理解是否正确,当一个索引为0的订单被删除时,一个索引为1的订单被分配了索引0,在下一次迭代时i == 1,没有这样的订单出现。你能告诉我是否是这种情况吗?
有一个可定制的分形功能,嗯,天哪,这太重了。我只留下了画物体的部分,以直观地显示分形是否正确形成--这是不可能的。
问题:我们怎样才能使它更容易,因为视觉测试 是愚蠢的。
extern int FrRight=5; // Баров справа
//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow = Low [nFrDn]; // Цена нижнего фрактала
SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);
// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}
//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);
for(pos=nRight+1; pos<bars; pos++) {
r=nRight;
if(mode==MODE_UPPER) {
CopyHigh(symb,tf,0,pos+equals+1,_high);
for(i=1; i<=r; i++) {
if(_high[pos]<=_high[pos-i]) break;
}}
if(mode==MODE_LOWER) {
CopyLow(symb,tf,0,pos+equals+1,_low);
for(i=1; i<=r; i++) {
if(_low[pos]>=_low[pos-i]) break;
}}
//--
if(i==r+1) {
l=nLeft;
e=equals;
for(int j=1; j<=l+equals; j++) {
if(mode==MODE_UPPER) {
if(_high[pos]<_high[pos+j]) break;
if(_high[pos]>_high[pos+j]) l--;
if(_high[pos]==_high[pos+j]) e--;
}
if(mode==MODE_LOWER) {
if(_low[pos]>_low[pos+j]) break;
if(_low[pos]<_low[pos+j]) l--;
if(_low[pos]==_low[pos+j]) e--;
}
if(l==0) {
cn++;
if(cn>numFr) return(pos);
}
//--
if(e<0) break;
}}
}
Print(__FUNCTION__": Фрактал не найден");
return(0);
}
//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
}
}
谢谢!
有一个可定制的分形功能,嗯,天哪,这太重了。我只留下了画物体的部分,以直观地显示分形是否正确形成--这是不可能的。
问题:我怎样才能使它更容易,因为目测 它是很愚蠢的。
谢谢!
你好。您能给新来的人一些建议吗?
这里有一个例子。
如果(Condition1)
如果(Condition2)
{
}
否则
{
}
根据代码,Else应该指的是if(condition1),如果condition1不被满足,将被执行。
但事实上,如果Condition2不被满足,它也会被执行。
你好。您能给新来的人一些建议吗?
这里有一个例子。
如果(Condition1)
如果(Condition2)
{
}
否则
{
}
根据代码,Else应该指的是if(condition1),如果condition1不被满足,将被执行。
但事实上,如果Condition2不被满足,它将被执行。
有条件的立即养成放卷曲牙套的习惯
如果(Condition)
{
}
A 根据你的问题
{
if(Условие2)
{
}
}
else
{
}