初学者的问题 MQL4 MT4 MetaTrader 4 - 页 46 1...394041424344454647484950515253...261 新评论 Oksana Berenko 2016.12.27 18:48 #451 Renat Akhtyamov: int ticket;//тикет ордера.......... ticket=OrderSend(.....);//приказ и запоминаем тикет ордераif(ticket>0)//открылась{//действия с тикетом}更准确的说法是。if(ticket!=-1)//открылась{//действия с тикетом}OrderSend-"返回交易服务器分配给订单的票号,如果失败则返回-1 。"虽然即使在测试器中,第一张票的号码也是1,而不是0。 Alexey Volchanskiy 2016.12.29 01:54 #452 Oksana Berenko:更准确地说,它将是。if(ticket!=-1)//открылась{//действия с тикетом}OrderSend -"返回交易服务器分配给订单的票号,如果失败则返回-1 。" 虽然即使在测试器中,第一张票的号码也是1,而不是0。很高兴看到失踪的奥克萨娜))。是的,在测试器和DC服务器上的票据以1开始,但你永远不会在DC中抓到1。你的版本不大管用,用-1来比较不等式是不正确的。如果真实账户 返回1234567怎么办?if(ticket>0)//открылась{//действия с тикетом}// так верно [删除] 2016.12.29 02:27 #453 因此,在测试器中,一张票不能小于1,在现实世界中更是如此。0小于1,两个条件都是正确的,只有一个用于比较,另一个用于排除。虽然我已经习惯了这样做。// Открываем ордер int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor); if(ticketbuy<0) Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError()); else Print(sy," OpenPosition. OrderSend Buy successfully");但考虑到我的,条件都是正确的,只是逻辑不同) Questions from Beginners MQL4 Who can help with 谁能帮助解决机器人的问题,为什么它不工作了? [删除] 2016.12.30 18:02 #454 晚上好,请允许我祝您新年快乐!请您告诉我这段代码有什么问题吗?void CloseOrder(int type) { bool ret; int error=0; double price=0.0; int total=OrdersTotal(); if(!disabled(_Symbol)) { Print(rezult); return; } for(int i=total-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderSymbol()!=_Symbol)continue; if(OrderMagicNumber()!=Magic)continue; if(OrderType()>1)continue; if(OrderType()!=type)continue; int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS); if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits); if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits); if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue; ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen); if(!ret) { error=GetLastError(); rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error)); Print(rezult); } else { rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())); Print(rezult); } } } Questions from Beginners MQL4 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 编码帮助 Renat Akhtyamov 2016.12.30 18:06 #455 Movlat Baghiyev: 我祝你新年快乐!你能告诉我这个代码有什么问题吗?我建议从根源上改变逻辑即有必要保留未结订单的记录--有多少卖出,有多少拜克被打开然后基于这些考虑,我们应该管理订单 - 打开和关闭它们 wishmast 2016.12.31 10:23 #456 我不知道为什么EA开了很多订单,如果条件不应该是开仓,但开仓后又开了。我不明白为什么我的EA开了很多订单,如果我不想让它开仓,但在我开仓后又开了,我怀疑是循环出了问题,我不太明白循环的问题for(int i=OrdersTotal()-1;i>=0;i--)如果(OrderSelect(i,SELECT_BY_POS))如果(OrderMagicNumber()==magic) //如果我们的Magic{if(OrderType()==OP_BUY) sdel_b++; // count bai如果(OrderType()==OP_SELL) sdel_s++; // 计算sels如果(OrderType()==OP_BUYSTOP) otl_b++; // 计算待定的补仓次数if(OrderType()==OP_SELLSTOP) otl_s++; // 计算待定卖出止损点}// 现在开放订单if(Hour()==00 &&Minute()==01 && otl_b==0 && otl_s ==0); // 如果是时间,并且没有挂单。{OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //取一个位置。OrderSend (Symbol(,OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //} Questions from Beginners MQL4 如何编码? 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Sergey Gritsay 2016.12.31 15:00 #457 wishmast:我不知道为什么EA开了很多订单,如果条件不应该是开仓,但开仓后又开了。我不明白为什么我的EA开了很多订单,如果我不想让它开仓,但在我开仓后又开了,我怀疑是循环出了问题,我不太明白循环的问题for(int i=OrdersTotal()-1;i>=0;i--)如果(OrderSelect(i,SELECT_BY_POS))如果(OrderMagicNumber()==magic) //如果我们的Magic{if(OrderType()==OP_BUY) sdel_b++; // count bai如果(OrderType()==OP_SELL) sdel_s++; // 计算sels如果(OrderType()==OP_BUYSTOP) otl_b++; // 计算待定的补仓次数if(OrderType()==OP_SELLSTOP) otl_s++; // 计算待定卖出止损点}// 现在开放订单if(Hour()==00 &&Minute()==01 && otl_b==0 && otl_s ==0); // 如果是时间,并且没有挂单。{OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //取一个位置。OrderSend (Symbol(,OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //}试试这个 sdel_b=0; sdel_s=0; otl_b=0; otl_s=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==magic) // Если наш Меджик { if(OrderType()==OP_BUY) sdel_b++; // Считаем баи if(OrderType()==OP_SELL) sdel_s++; // Считаем селы if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы } } }.... Questions from Beginners MQL4 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 被错误困扰的是没有交易业务 wishmast 2016.12.31 16:03 #458 Sergey Gritsay:试试这个 sdel_b=0; sdel_s=0; otl_b=0; otl_s=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==magic) // Если наш Меджик { if(OrderType()==OP_BUY) sdel_b++; // Считаем баи if(OrderType()==OP_SELL) sdel_s++; // Считаем селы if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы } } }.... 依然开出大量订单148未结订单 和挂单 的数量已经达到经纪人设定的限制。 Sergey Gritsay 2016.12.31 16:42 #459 wishmast: 仍旧打开了大量的订单148未结订单 和挂单 的数量已经达到经纪人设定的限制。 请把整个代码发给我们,我很难理解你在哪里犯了错误 Andrei Sokolov 2016.12.31 18:14 #460 问候。祝大家新年快乐!当我试图在EA运行后对其进行优化时,结果和优化图都是空白的,并且在日志中写有日志。在优化过程中做了2次,有2个结果因不 重要而被丢弃。取消对"遗传算法"的勾选并没有帮助。我理解,对测试者来说,结果似乎微不足道,但我们如何才能看到那里有什么?而这是在测试过程中,尽管专家顾问在同一时期(一年)没有亏损,但也是+/-20%。 1...394041424344454647484950515253...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
..........
ticket=OrderSend(.....);//приказ и запоминаем тикет ордера
if(ticket>0)//открылась
{
//действия с тикетом
}
更准确的说法是。
{
//действия с тикетом
}
OrderSend-"返回交易服务器分配给订单的票号,如果失败则返回-1 。"
虽然即使在测试器中,第一张票的号码也是1,而不是0。
更准确地说,它将是。
{
//действия с тикетом
}
OrderSend -"返回交易服务器分配给订单的票号,如果失败则返回-1 。"
虽然即使在测试器中,第一张票的号码也是1,而不是0。
很高兴看到失踪的奥克萨娜))。
是的,在测试器和DC服务器上的票据以1开始,但你永远不会在DC中抓到1。你的版本不大管用,用-1来比较不等式是不正确的。如果真实账户 返回1234567怎么办?
{
//действия с тикетом
}
// так верно
因此,在测试器中,一张票不能小于1,在现实世界中更是如此。
0小于1,两个条件都是正确的,只有一个用于比较,另一个用于排除。
虽然我已经习惯了这样做。
int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor);
if(ticketbuy<0)
Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError());
else
Print(sy," OpenPosition. OrderSend Buy successfully");
但考虑到我的,条件都是正确的,只是逻辑不同)
{
bool ret;
int error=0;
double price=0.0;
int total=OrdersTotal();
if(!disabled(_Symbol))
{
Print(rezult);
return;
}
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderType()>1)continue;
if(OrderType()!=type)continue;
int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits);
if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits);
if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue;
ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen);
if(!ret)
{
error=GetLastError();
rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error));
Print(rezult);
}
else
{
rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType()));
Print(rezult);
}
}
}
我祝你新年快乐!你能告诉我这个代码有什么问题吗?
我建议从根源上改变逻辑
即有必要保留未结订单的记录--有多少卖出,有多少拜克被打开
然后基于这些考虑,我们应该管理订单 - 打开和关闭它们
我不知道为什么EA开了很多订单,如果条件不应该是开仓,但开仓后又开了。
我不明白为什么我的EA开了很多订单,如果我不想让它开仓,但在我开仓后又开了,我怀疑是循环出了问题,我不太明白循环的问题
for(int i=OrdersTotal()-1;i>=0;i--)
如果(OrderSelect(i,SELECT_BY_POS))
如果(OrderMagicNumber()==magic) //如果我们的Magic
{
if(OrderType()==OP_BUY) sdel_b++; // count bai
如果(OrderType()==OP_SELL) sdel_s++; // 计算sels
如果(OrderType()==OP_BUYSTOP) otl_b++; // 计算待定的补仓次数
if(OrderType()==OP_SELLSTOP) otl_s++; // 计算待定卖出止损点
}
// 现在开放订单
if(Hour()==00 &&Minute()==01 && otl_b==0 && otl_s ==0); // 如果是时间,并且没有挂单。
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //取一个位置。
OrderSend (Symbol(,OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
我不知道为什么EA开了很多订单,如果条件不应该是开仓,但开仓后又开了。
我不明白为什么我的EA开了很多订单,如果我不想让它开仓,但在我开仓后又开了,我怀疑是循环出了问题,我不太明白循环的问题
for(int i=OrdersTotal()-1;i>=0;i--)
如果(OrderSelect(i,SELECT_BY_POS))
如果(OrderMagicNumber()==magic) //如果我们的Magic
{
if(OrderType()==OP_BUY) sdel_b++; // count bai
如果(OrderType()==OP_SELL) sdel_s++; // 计算sels
如果(OrderType()==OP_BUYSTOP) otl_b++; // 计算待定的补仓次数
if(OrderType()==OP_SELLSTOP) otl_s++; // 计算待定卖出止损点
}
// 现在开放订单
if(Hour()==00 &&Minute()==01 && otl_b==0 && otl_s ==0); // 如果是时间,并且没有挂单。
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //取一个位置。
OrderSend (Symbol(,OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
试试这个
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
试试这个
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
仍旧打开了大量的订单
问候。祝大家新年快乐!
当我试图在EA运行后对其进行优化时,结果和优化图都是空白的,并且在日志中写有日志。
在优化过程中做了2次,有2个结果因不 重要而被丢弃。
取消对"遗传算法"的勾选并没有帮助。我理解,对测试者来说,结果似乎微不足道,但我们如何才能看到那里有什么?而这是在测试过程中,尽管专家顾问在同一时期(一年)没有亏损,但也是+/-20%。