问吧! - 页 63 1...565758596061626364656667686970...182 新评论 proverbs 2007.06.15 01:30 #621 好的,我想出了枢轴的计算方法。谢谢你的帮助。 我现在面临的问题是,当它正确地在正确的价格位置打开挂单 时,每当价格行动移动1个点时,它就会继续重复打开挂单。 我已经寻找并将继续研究为什么会发生这种情况,但想看看你是否能给我一个提示或帮助,如果你看到我正在做的逻辑错误。 感谢你的时间。 extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time. extern int look_price_min = 35; // Offset in minutes when to look on price. extern int close_hour = 12; // Close all orders after this hour bool use_close_hour = true; // set it to false to ignore close_hour int take_profit = 20; extern int Currency_Spread = 4; int open_long = 21; int open_short = 21; int stop_long = 30; int stop_short = 30; extern int slippage = 0;// Put what your brooker requires extern double lots = 0.20; // Position size extern int magic = 123; bool clear_to_send = true; void ReportStrategy() { int totalorders = HistoryTotal(); double StrategyProfit = 0.0; double StrategyProfitOpen = 0.0; int StrategyOrders = 0; int StrategyOrdersOpen = 0; for(int j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrders++; StrategyProfit += OrderProfit(); } } } totalorders = OrdersTotal(); for(j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrdersOpen++; StrategyProfitOpen += OrderProfit(); } } } Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+", StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n", "Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime())); return; } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- ReportStrategy(); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { ReportStrategy(); if(Hour() >= close_hour && use_close_hour){ // we are after closing time int totalorders = OrdersTotal(); for(int j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } return(0); } if(Hour() == look_price_hour && Minute() >= look_price_min && clear_to_send){ // Probably I need to close any old positions first: totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } } double PIVOT; PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3; // Send orders: OrderSend(Symbol(), OP_BUYSTOP, lots, PIVOT+(open_long+Currency_Spread)*Point, // Spread included slippage, PIVOT+((open_long+Currency_Spread)-stop_long)*Point, PIVOT+((open_long+Currency_Spread)+take_profit)*Point, NULL, magic, 0, FireBrick); OrderSend(Symbol(), OP_SELLSTOP, lots, PIVOT-open_short*Point, slippage, PIVOT-(open_short-stop_short)*Point, PIVOT-(open_short+take_profit)*Point, NULL, magic, 0, FireBrick); clear_to_send = false; // mark that orders are sent if(!clear_to_send){ // there are active orders int long_ticket = -1; int short_ticket = -1; bool no_active_order = true; totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUYSTOP) long_ticket = OrderTicket(); if(OrderType() == OP_SELLSTOP) short_ticket = OrderTicket(); if(OrderType() == OP_BUY || OrderType() == OP_SELL) // Active order no_active_order = false; } } if(short_ticket == -1 && long_ticket != -1) OrderDelete(long_ticket); if(long_ticket == -1 && short_ticket != -1) OrderDelete(short_ticket); if(long_ticket == -1 && short_ticket == -1 && no_active_order && Hour() != look_price_hour && Minute() >= look_price_min) clear_to_send = true; if(Hour() == (look_price_hour-1) && MathAbs(Minute() - look_price_min) < 10) clear_to_send = true; } //---- return(0); } Ask! 如何编码? [警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 proverbs 2007.06.15 03:57 #622 关于我之前的帖子。 看起来 "clear_to_send = false; "在挂单 后没有切换。有什么想法吗? 一旦我把中枢作为挂单的参考点,就会发生这种情况。如果我不能解决这个逻辑问题,那么我想我将尝试找出如何从一个指标中引用一个枢轴,并从EA中调用它。 希望得到任何建议或帮助。 ryanklefas 2007.06.15 04:16 #623 extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time. extern int look_price_min = 35; // Offset in minutes when to look on price. extern int close_hour = 12; // Close all orders after this hour bool use_close_hour = true; // set it to false to ignore close_hour int take_profit = 20; extern int Currency_Spread = 4; int open_long = 21; int open_short = 21; int stop_long = 30; int stop_short = 30; extern int slippage = 0;// Put what your brooker requires extern double lots = 0.20; // Position size extern int magic = 123; bool clear_to_send = true; void ReportStrategy() { int totalorders = HistoryTotal(); double StrategyProfit = 0.0; double StrategyProfitOpen = 0.0; int StrategyOrders = 0; int StrategyOrdersOpen = 0; for(int j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrders++; StrategyProfit += OrderProfit(); } } } totalorders = OrdersTotal(); for(j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrdersOpen++; StrategyProfitOpen += OrderProfit(); } } } Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+", StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n", "Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime())); return; } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- ReportStrategy(); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { ReportStrategy(); if(Hour() >= close_hour && use_close_hour){ // we are after closing time int totalorders = OrdersTotal(); for(int j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } return(0); } if(Hour() == look_price_hour && Minute() >= look_price_min && clear_to_send){ // Probably I need to close any old positions first: totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } } double PIVOT; PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3; // Send orders: if (clear_to_send){ OrderSend(Symbol(), OP_BUYSTOP, lots, PIVOT+(open_long+Currency_Spread)*Point, // Spread included slippage, PIVOT+((open_long+Currency_Spread)-stop_long)*Point, PIVOT+((open_long+Currency_Spread)+take_profit)*Point, NULL, magic, 0, FireBrick); OrderSend(Symbol(), OP_SELLSTOP, lots, PIVOT-open_short*Point, slippage, PIVOT-(open_short-stop_short)*Point, PIVOT-(open_short+take_profit)*Point, NULL, magic, 0, FireBrick); clear_to_send = false; // mark that orders are sent } if(!clear_to_send){ // there are active orders int long_ticket = -1; int short_ticket = -1; bool no_active_order = true; totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUYSTOP) long_ticket = OrderTicket(); if(OrderType() == OP_SELLSTOP) short_ticket = OrderTicket(); if(OrderType() == OP_BUY || OrderType() == OP_SELL) // Active order no_active_order = false; } } if(short_ticket == -1 && long_ticket != -1) OrderDelete(long_ticket); if(long_ticket == -1 && short_ticket != -1) OrderDelete(short_ticket); if(long_ticket == -1 && short_ticket == -1 && no_active_order && Hour() != look_price_hour && Minute() >= look_price_min) clear_to_send = true; if(Hour() == (look_price_hour-1) && MathAbs(Minute() - look_price_min) < 10) clear_to_send = true; } //---- return(0); } 试试这个代码吧。 Ask! 如何编码? [警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 proverbs 2007.06.15 17:42 #624 Ryanklefas , 你在这一领域的表现非常出色。 我根据你的修改所做的测试成功了。 不知道为什么添加枢轴逻辑会干扰到当前的 "如果 "逻辑。我可能需要在不同的地方建立枢轴代码。然而,我看到你是如何隔离挂单 代码的,到目前为止是有效的。 谢谢你给我指出的代码例子的网址。在我提高编程技能时,这将是一个很好的资源。 我发现,解决一个问题有时会引起另一个问题,这很有趣/令人沮丧。 目前的问题。我现在需要找出为什么这段代码只允许5位数而不是3位数的价格挂单。 例如:1.1234可以正常工作,但1.12会出现错误,即1.123333不是OrderSend的有效价格。 所以它对英镑/美元有效,但对美元/日元无效。 再次感谢您的时间。 ryanklefas 2007.06.16 08:49 #625 proverbs: 汇率。你在这一领域的表现非常出色。 谢谢你。 至于你的问题。 确保在你向orderSend函数发送枢轴值之前,你已经用NormalizeDouble函数 将其规范化 了;使用预设值 "Digits "作为第二个参数,将双数四舍五入到你的货币的适当位数。 ryanklefas 2007.06.16 08:52 #626 waaustin: 我的问题是如何将计算出的数值四舍五入到最接近的小数位。 我认为normalizeDouble函数 也能为你工作。 我也见过使用MathFloor和MathCeiling函数来完成同样的事情的代码。 hellkkas 2007.06.16 09:04 #627 另一个帮助 谁能告诉我怎么做? 附加的文件: chart.gif 18 kb Sergey Golubev 2007.06.16 09:21 #628 hellkas: 谁能告诉我怎么做? 我认为这与这个主题有关https://www.mql5.com/en/forum/176969 highway3000 2007.06.16 14:52 #629 在代码中设置级别的颜色 谁能告诉我如何设置level1 30为绿色,level2 70为红色? #属性 indicator_separate_window #属性 indicator_buffers 1 #属性 indicator_color1 DodgerBlue #属性 indicator_level1 30 #属性 indicator_level2 70 #属性 indicator_minimum 0 #属性 indicator_maximum 100 谢谢你 ryanklefas 2007.06.16 21:44 #630 highway3000: 谁能告诉我如何将level1 30设置为绿色,leve2 70设置为红色? #属性 indicator_separate_window#属性 indicator_buffers 1#属性 indicator_color1 DodgerBlue#属性 indicator_level1 30#属性 indicator_level2 70#属性 indicator_minimum 0#属性 indicator_maximum 100 预先感谢 我想MetaEditor的这一部分会是你要找的东西。 MQL4参考 - 基础知识 - 预处理程序 -控制 编译 1...565758596061626364656667686970...182 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
好的,我想出了枢轴的计算方法。谢谢你的帮助。
我现在面临的问题是,当它正确地在正确的价格位置打开挂单 时,每当价格行动移动1个点时,它就会继续重复打开挂单。
我已经寻找并将继续研究为什么会发生这种情况,但想看看你是否能给我一个提示或帮助,如果你看到我正在做的逻辑错误。
感谢你的时间。
extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time.
extern int look_price_min = 35; // Offset in minutes when to look on price.
extern int close_hour = 12; // Close all orders after this hour
bool use_close_hour = true; // set it to false to ignore close_hour
int take_profit = 20;
extern int Currency_Spread = 4;
int open_long = 21;
int open_short = 21;
int stop_long = 30;
int stop_short = 30;
extern int slippage = 0;// Put what your brooker requires
extern double lots = 0.20; // Position size
extern int magic = 123;
bool clear_to_send = true;
void ReportStrategy()
{
int totalorders = HistoryTotal();
double StrategyProfit = 0.0;
double StrategyProfitOpen = 0.0;
int StrategyOrders = 0;
int StrategyOrdersOpen = 0;
for(int j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrders++;
StrategyProfit += OrderProfit();
}
}
}
totalorders = OrdersTotal();
for(j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrdersOpen++;
StrategyProfitOpen += OrderProfit();
}
}
}
Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+",
StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n",
"Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime()));
return;
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
ReportStrategy();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
ReportStrategy();
if(Hour() >= close_hour &&
use_close_hour){
// we are after closing time
int totalorders = OrdersTotal();
for(int j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
return(0);
}
if(Hour() == look_price_hour &&
Minute() >= look_price_min &&
clear_to_send){
// Probably I need to close any old positions first:
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
}
double PIVOT;
PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3;
// Send orders:
OrderSend(Symbol(),
OP_BUYSTOP,
lots,
PIVOT+(open_long+Currency_Spread)*Point, // Spread included
slippage,
PIVOT+((open_long+Currency_Spread)-stop_long)*Point,
PIVOT+((open_long+Currency_Spread)+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
OrderSend(Symbol(),
OP_SELLSTOP,
lots,
PIVOT-open_short*Point,
slippage,
PIVOT-(open_short-stop_short)*Point,
PIVOT-(open_short+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
clear_to_send = false; // mark that orders are sent
if(!clear_to_send){ // there are active orders
int long_ticket = -1;
int short_ticket = -1;
bool no_active_order = true;
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUYSTOP)
long_ticket = OrderTicket();
if(OrderType() == OP_SELLSTOP)
short_ticket = OrderTicket();
if(OrderType() == OP_BUY ||
OrderType() == OP_SELL) // Active order
no_active_order = false; }
}
if(short_ticket == -1 && long_ticket != -1)
OrderDelete(long_ticket);
if(long_ticket == -1 && short_ticket != -1)
OrderDelete(short_ticket);
if(long_ticket == -1 && short_ticket == -1 && no_active_order &&
Hour() != look_price_hour && Minute() >= look_price_min)
clear_to_send = true;
if(Hour() == (look_price_hour-1) &&
MathAbs(Minute() - look_price_min) < 10)
clear_to_send = true;
}
//----
return(0);
}
关于我之前的帖子。
看起来 "clear_to_send = false; "在挂单 后没有切换。有什么想法吗?
一旦我把中枢作为挂单的参考点,就会发生这种情况。如果我不能解决这个逻辑问题,那么我想我将尝试找出如何从一个指标中引用一个枢轴,并从EA中调用它。
希望得到任何建议或帮助。
extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time.
extern int look_price_min = 35; // Offset in minutes when to look on price.
extern int close_hour = 12; // Close all orders after this hour
bool use_close_hour = true; // set it to false to ignore close_hour
int take_profit = 20;
extern int Currency_Spread = 4;
int open_long = 21;
int open_short = 21;
int stop_long = 30;
int stop_short = 30;
extern int slippage = 0;// Put what your brooker requires
extern double lots = 0.20; // Position size
extern int magic = 123;
bool clear_to_send = true;
void ReportStrategy()
{
int totalorders = HistoryTotal();
double StrategyProfit = 0.0;
double StrategyProfitOpen = 0.0;
int StrategyOrders = 0;
int StrategyOrdersOpen = 0;
for(int j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrders++;
StrategyProfit += OrderProfit();
}
}
}
totalorders = OrdersTotal();
for(j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrdersOpen++;
StrategyProfitOpen += OrderProfit();
}
}
}
Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+",
StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n",
"Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime()));
return;
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
ReportStrategy();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
ReportStrategy();
if(Hour() >= close_hour &&
use_close_hour){
// we are after closing time
int totalorders = OrdersTotal();
for(int j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
return(0);
}
if(Hour() == look_price_hour &&
Minute() >= look_price_min &&
clear_to_send){
// Probably I need to close any old positions first:
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
}
double PIVOT;
PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3;
// Send orders:
if (clear_to_send){
OrderSend(Symbol(),
OP_BUYSTOP,
lots,
PIVOT+(open_long+Currency_Spread)*Point, // Spread included
slippage,
PIVOT+((open_long+Currency_Spread)-stop_long)*Point,
PIVOT+((open_long+Currency_Spread)+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
OrderSend(Symbol(),
OP_SELLSTOP,
lots,
PIVOT-open_short*Point,
slippage,
PIVOT-(open_short-stop_short)*Point,
PIVOT-(open_short+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
clear_to_send = false; // mark that orders are sent
}
if(!clear_to_send){ // there are active orders
int long_ticket = -1;
int short_ticket = -1;
bool no_active_order = true;
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUYSTOP)
long_ticket = OrderTicket();
if(OrderType() == OP_SELLSTOP)
short_ticket = OrderTicket();
if(OrderType() == OP_BUY ||
OrderType() == OP_SELL) // Active order
no_active_order = false; }
}
if(short_ticket == -1 && long_ticket != -1)
OrderDelete(long_ticket);
if(long_ticket == -1 && short_ticket != -1)
OrderDelete(short_ticket);
if(long_ticket == -1 && short_ticket == -1 && no_active_order &&
Hour() != look_price_hour && Minute() >= look_price_min)
clear_to_send = true;
if(Hour() == (look_price_hour-1) &&
MathAbs(Minute() - look_price_min) < 10)
clear_to_send = true;
}
//----
return(0);
}
试试这个代码吧。
Ryanklefas ,
你在这一领域的表现非常出色。
我根据你的修改所做的测试成功了。
不知道为什么添加枢轴逻辑会干扰到当前的 "如果 "逻辑。我可能需要在不同的地方建立枢轴代码。然而,我看到你是如何隔离挂单 代码的,到目前为止是有效的。
谢谢你给我指出的代码例子的网址。在我提高编程技能时,这将是一个很好的资源。
我发现,解决一个问题有时会引起另一个问题,这很有趣/令人沮丧。
目前的问题。我现在需要找出为什么这段代码只允许5位数而不是3位数的价格挂单。
例如:1.1234可以正常工作,但1.12会出现错误,即1.123333不是OrderSend的有效价格。
所以它对英镑/美元有效,但对美元/日元无效。
再次感谢您的时间。
汇率。
你在这一领域的表现非常出色。
谢谢你。
至于你的问题。
确保在你向orderSend函数发送枢轴值之前,你已经用NormalizeDouble函数 将其规范化 了;使用预设值 "Digits "作为第二个参数,将双数四舍五入到你的货币的适当位数。
我的问题是如何将计算出的数值四舍五入到最接近的小数位。
我认为normalizeDouble函数 也能为你工作。 我也见过使用MathFloor和MathCeiling函数来完成同样的事情的代码。
另一个帮助
谁能告诉我怎么做?
谁能告诉我怎么做?
我认为这与这个主题有关https://www.mql5.com/en/forum/176969
在代码中设置级别的颜色
谁能告诉我如何设置level1 30为绿色,level2 70为红色?
#属性 indicator_separate_window
#属性 indicator_buffers 1
#属性 indicator_color1 DodgerBlue
#属性 indicator_level1 30
#属性 indicator_level2 70
#属性 indicator_minimum 0
#属性 indicator_maximum 100
谢谢你
谁能告诉我如何将level1 30设置为绿色,leve2 70设置为红色?
#属性 indicator_separate_window
#属性 indicator_buffers 1
#属性 indicator_color1 DodgerBlue
#属性 indicator_level1 30
#属性 indicator_level2 70
#属性 indicator_minimum 0
#属性 indicator_maximum 100
预先感谢我想MetaEditor的这一部分会是你要找的东西。
MQL4参考 - 基础知识 - 预处理程序 -控制 编译