初学者的问题 MQL4 MT4 MetaTrader 4 - 页 255 1...248249250251252253254255256257258259260 新评论 Roman Epifanov 2021.12.04 11:46 #2541 Mihail Matkovskij #:你是如何计算tp的? 我在变量double tp=50中指定。 Mihail Matkovskij 2021.12.04 11:51 #2542 Roman Epifanov #:我在变量double tp=50中指定。 double takeProfit; takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell Roman Epifanov 2021.12.04 11:56 #2543 Mihail Matkovskij #: 现在写的是 2021.12.04 13:56:09.509 TestGenerator: 不匹配的数据错误(2021.12.03 23:45的高价1.13110没有从最低时间段达到,高价1.13104不匹配。) //+------------------------------------------------------------------+ //| repa.mq4 | //| Copyright 2021, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- int i; double lot_sum; bool trend; double ema; double sl=50.0,tp=50.0; tp = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell double lot=0.01; while (i<OrdersTotal()) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций } ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней if (Close[0]<ema)trend=true ;else if(Close[0]>ema)trend=false; //определили тренд if (Close[1]<Open[1]) {OrderSend(Symbol(),OP_SELL,lot,Bid,2,Ask+sl,tp,"Candle sell, Close[0]<MA");}; } //+------------------------------------------------------------------+ Roman Epifanov 2021.12.04 12:09 #2544 Mihail Matkovskij #: 戴上它一分钟......就可以了......。 但停止水平是不同的 - 1 2021.09.16 05:59 出售 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00 Mihail Matkovskij 2021.12.04 12:32 #2545 Roman Epifanov #:现在写的是2021.12.04 13:56:09.509 TestGenerator: 不匹配的数据错误(2021.12.03 23:45的高价1.13110没有从最低时间段达到,高价1.13104不匹配。) void OnTick() { //--- int i; double lot_sum; bool trend; double ema; double sl=50.0,tp=50.0; double stopLoss, takeProfit, openPrice; double lot=0.01; while (i<OrdersTotal()) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций } ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней if (Close[0]<ema) trend=true ; else if(Close[0]>ema) trend=false; //определили тренд takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell stopLoss = NormalizeDouble(Bid + sl * Point(), Digits()); // SL для Sell openPrice = NormalizeDouble(Bid, Digits()); if (Close[1]<Open[1]) { OrderSend(Symbol(), OP_SELL, lot, openPrice, 2, stopLoss, takeProfit, "Candle sell, Close[0]<MA"); } } 所有规则都在网上,请自行查阅。 Roman Epifanov 2021.12.04 12:44 #2546 Mihail Matkovskij #:规则都在网上,请自己查看。 谢谢你! Grigory Zakordonsky 2021.12.05 14:49 #2547 晚上好,先生们,请告知为什么顾问在打开第二个订单时出现错误? 顾问的文本本身 //+----------------------Параметры-----------------------------------+ 输入 int TakeProfit = 100; // 以点为单位的利润 输入 int StopLoss = 50; // 以点为单位的损失 输入双倍的Lot = 0.01; // 开始手数 输入双倍Multilot = 1.95; // 起始手数的倍数 输入 int Slippage =30; // Slippage 输入 int MagicNumber = 333 ; // 唯一的数字 //+------------------------------------------------------------------+ //|专家初始化功能| //+------------------------------------------------------------------+ double tp=0。 double sl=0。 int OnInit() { tp=NormalizeDouble(TakeProfit*Point(),Digits())。 sl=NormalizeDouble(StopLoss*Point(),Digits())。 return(INIT_SUCCEED)。 } //+------------------------------------------------------------------+ //|专家打勾功能| //+------------------------------------------------------------------+ 空白的OnTick() { //--当专家顾问被激活时,循环检查未结订单并计算它们。 int buy=0; //买入订单的数量 int sell=0; //卖出订单的数量 for(int i = OrdersTotal()-1; i>=0; i--) 如果(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) 如果(OrderSymbol()==Symbol()) 如果(OrderMagicNumber()== MagicNumber) { 如果(OrderType()==OP_BUY) 买++。 如果(OrderType()==OP_SELL) 出售++。 } //--当EA被激活时,循环获得最后一个关闭订单的数据 int type=-1; //一个封闭订单的类型 int history_close_orders=0; //已关闭订单的数量 double lot=0; //Lot of the last closed order double profit=0; //最后一笔订单平仓时的利润。 datetime time=0; //最后一个订单的结束时间。 for(int i = OrdersHistoryTotal()-1; i>=0; i--) if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY)) 如果(OrderSymbol()==Symbol()) 如果(OrderMagicNumber()== MagicNumber) 如果(OrderCloseTime()>time) { history_close_orders++。 time = OrderCloseTime();//最后的订单关闭时间 lot= OrderLots();//最后成交的订单的手数 type=OrderType();//最后关闭订单的类型 profit=OrderProfit()*OrderSwap()*OrderCommission();//最后成交的订单的利润 } //计算EA将工作的手数 double Lots_Work=0;//工作批次 如果(history_close_orders==0 || profit>0)//如果没有关闭的订单或最后一个订单在利润上关闭。 Lots_Work=Lot;//工作批次等于初始批次。 如果(history_close_orders>0 && profit<0) // 如果最后一笔订单以红色收盘。 Lots_Work=1;//工作手数将等于上一个订单的手数乘以乘数。 //打开第一个买入订单 如果(buy==0 || profit>0) { int ticket=OrderSend(Symbol(,OP_BUY,Lots_Work,Ask,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrGreen); 如果(ticket<0) Print("OrderSend failed with error #",GetLastError())。 否则 Print("OrderSend completed successfully"); } // 开启第二笔和后续的买入订单 如果(buy==0 && type==OP_BUY && profit<0) { int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "EA Test fair",MagicNumber,0,clrGreen); 如果(ticket<0) Print("OrderSend failed with error #",GetLastError())。 否则 Print("OrderSend completed successfully"); } // 第一个卖出订单 的开启 如果(sell==0 || profit>0) { int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "EA Test fair",MagicNumber,0,clrRed); 如果(ticket<0) Print("OrderSend failed with error #",GetLastError())。 否则 Print("OrderSend completed successfully"); } // 开启第二笔和后续的买入订单 如果(sell==0 &&(type==OP_SELL && profit<0)) { int ticket=OrderSend(Symbol(,OP_SELL,Lots_Work,Bid,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrRed); 如果(ticket<0) Print("OrderSend failed with error #",GetLastError())。 否则 Print("OrderSend completed successfully"); } //--修改订单,增加获利和止损。 for(int i = OrdersTotal()-1; i>=0; i--) 如果(OrderSelect(i, SELECT_BY_POS)) 如果(OrderSymbol()==Symbol()) 如果(OrderMagicNumber()== MagicNumber) { 如果(OrderType()==OP_BUY) { 如果(OrderStopLoss()==0 || OrderTakeProfit()==0) 如果(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits(),NormalizeDouble(OrderOpenPrice()+tp,Digits(),0,clrGreen) Print("OrderModify OK!")。 否则 Print("OrderModify BUY failed #", GetLastError())。 } 如果(OrderType()==OP_SELL) { 如果(OrderStopLoss()==0 || OrderTakeProfit()==0) 如果(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits(),NormalizeDouble(OrderOpenPrice()-tp,Digits(),0,clrRed) Print("OrderModify OK!")。 否则 Print("OrderModify SELL failed #", GetLastError())。 } } } //+------------------------------------------------------------------+ Questions from Beginners MQL4 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 通用MA交叉EA atztek 2021.12.20 07:10 #2548 我的旧笔记本电脑有i3处理器,仍然安装着WinXP 32位,不支持MT5。最近内存增加到6GB,我想安装64位操作系统,可以运行MT4和MT5。哪个更合适 - Win7或Win8.1 ? Andrei Sokolov 2021.12.20 08:12 #2549 atztek #: 我的旧笔记本电脑有i3处理器,仍然安装着WinXP 32位,不支持MT5。最近内存增加到6GB,我想安装64位操作系统,可以运行MT4和MT5。哪个更合适 - Win7或Win8.1 ? 10 atztek 2021.12.20 12:18 #2550 Andrey Sokolov #:10 这个版本安装在一台新的笔记本电脑上,厌倦了不断的更新。此外,人们写道,在旧的笔记本电脑上,8块钱比10块钱运行得更好。我想把WinXP留在我的旧笔记本上,但MT5不能在上面运行,而且3Gb的内存对XP来说是不够的。不过,如果在7和8.1之间选择,哪一个更适合在MT4/5上进行优化? 1...248249250251252253254255256257258259260 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你是如何计算tp的?
我在变量double tp=50中指定。
我在变量double tp=50中指定。
现在写的是
2021.12.04 13:56:09.509 TestGenerator: 不匹配的数据错误(2021.12.03 23:45的高价1.13110没有从最低时间段达到,高价1.13104不匹配。)
戴上它一分钟......就可以了......。
但停止水平是不同的 -
1 2021.09.16 05:59 出售 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00
现在写的是
2021.12.04 13:56:09.509 TestGenerator: 不匹配的数据错误(2021.12.03 23:45的高价1.13110没有从最低时间段达到,高价1.13104不匹配。)
所有规则都在网上,请自行查阅。
规则都在网上,请自己查看。
谢谢你!
晚上好,先生们,请告知为什么顾问在打开第二个订单时出现错误?
顾问的文本本身
//+----------------------Параметры-----------------------------------+
输入 int TakeProfit = 100; // 以点为单位的利润
输入 int StopLoss = 50; // 以点为单位的损失
输入双倍的Lot = 0.01; // 开始手数
输入双倍Multilot = 1.95; // 起始手数的倍数
输入 int Slippage =30; // Slippage
输入 int MagicNumber = 333 ; // 唯一的数字
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
double tp=0。
double sl=0。
int OnInit()
{
tp=NormalizeDouble(TakeProfit*Point(),Digits())。
sl=NormalizeDouble(StopLoss*Point(),Digits())。
return(INIT_SUCCEED)。
}
//+------------------------------------------------------------------+
//|专家打勾功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
//--当专家顾问被激活时,循环检查未结订单并计算它们。
int buy=0; //买入订单的数量
int sell=0; //卖出订单的数量
for(int i = OrdersTotal()-1; i>=0; i--)
如果(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
如果(OrderSymbol()==Symbol())
如果(OrderMagicNumber()== MagicNumber)
{
如果(OrderType()==OP_BUY)
买++。
如果(OrderType()==OP_SELL)
出售++。
}
//--当EA被激活时,循环获得最后一个关闭订单的数据
int type=-1; //一个封闭订单的类型
int history_close_orders=0; //已关闭订单的数量
double lot=0; //Lot of the last closed order
double profit=0; //最后一笔订单平仓时的利润。
datetime time=0; //最后一个订单的结束时间。
for(int i = OrdersHistoryTotal()-1; i>=0; i--)
if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))
如果(OrderSymbol()==Symbol())
如果(OrderMagicNumber()== MagicNumber)
如果(OrderCloseTime()>time)
{
history_close_orders++。
time = OrderCloseTime();//最后的订单关闭时间
lot= OrderLots();//最后成交的订单的手数
type=OrderType();//最后关闭订单的类型
profit=OrderProfit()*OrderSwap()*OrderCommission();//最后成交的订单的利润
}
//计算EA将工作的手数
double Lots_Work=0;//工作批次
如果(history_close_orders==0 || profit>0)//如果没有关闭的订单或最后一个订单在利润上关闭。
Lots_Work=Lot;//工作批次等于初始批次。
如果(history_close_orders>0 && profit<0) // 如果最后一笔订单以红色收盘。
Lots_Work=1;//工作手数将等于上一个订单的手数乘以乘数。
//打开第一个买入订单
如果(buy==0 || profit>0)
{
int ticket=OrderSend(Symbol(,OP_BUY,Lots_Work,Ask,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrGreen);
如果(ticket<0)
Print("OrderSend failed with error #",GetLastError())。
否则
Print("OrderSend completed successfully");
}
// 开启第二笔和后续的买入订单
如果(buy==0 && type==OP_BUY && profit<0)
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "EA Test fair",MagicNumber,0,clrGreen);
如果(ticket<0)
Print("OrderSend failed with error #",GetLastError())。
否则
Print("OrderSend completed successfully");
}
// 第一个卖出订单 的开启
如果(sell==0 || profit>0)
{
int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "EA Test fair",MagicNumber,0,clrRed);
如果(ticket<0)
Print("OrderSend failed with error #",GetLastError())。
否则
Print("OrderSend completed successfully");
}
// 开启第二笔和后续的买入订单
如果(sell==0 &&(type==OP_SELL && profit<0))
{
int ticket=OrderSend(Symbol(,OP_SELL,Lots_Work,Bid,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrRed);
如果(ticket<0)
Print("OrderSend failed with error #",GetLastError())。
否则
Print("OrderSend completed successfully");
}
//--修改订单,增加获利和止损。
for(int i = OrdersTotal()-1; i>=0; i--)
如果(OrderSelect(i, SELECT_BY_POS))
如果(OrderSymbol()==Symbol())
如果(OrderMagicNumber()== MagicNumber)
{
如果(OrderType()==OP_BUY)
{
如果(OrderStopLoss()==0 || OrderTakeProfit()==0)
如果(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits(),NormalizeDouble(OrderOpenPrice()+tp,Digits(),0,clrGreen)
Print("OrderModify OK!")。
否则
Print("OrderModify BUY failed #", GetLastError())。
}
如果(OrderType()==OP_SELL)
{
如果(OrderStopLoss()==0 || OrderTakeProfit()==0)
如果(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits(),NormalizeDouble(OrderOpenPrice()-tp,Digits(),0,clrRed)
Print("OrderModify OK!")。
否则
Print("OrderModify SELL failed #", GetLastError())。
}
}
}
//+------------------------------------------------------------------+
我的旧笔记本电脑有i3处理器,仍然安装着WinXP 32位,不支持MT5。最近内存增加到6GB,我想安装64位操作系统,可以运行MT4和MT5。哪个更合适 - Win7或Win8.1 ?
10
10