MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
int open_orders() { int count = 0; for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down { if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order if(OrderSymbol() != _Symbol) continue; // optional check for same symbol if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL } return(count); }
int open_orders() { int count = 0; for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down { if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order if(OrderSymbol() != _Symbol) continue; // optional check for same symbol if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL } return(count); }
bool order= 0;
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
你对票的双重声明。
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
ticket的声明隐藏了......胡说八道? 看我是人类的编译器。
删除 第二个int.
我把
bool order和
int ticket
在全局变量上,其余的代码在OnTick上,但现在仍然没有任何条目。
未编译,未测试
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
马可:我删除了重复的int,但现在没有交易,我需要1笔交易,如果价格>一目云,这段代码首先是伟大的,但它继续创建新的交易,如果
价格高于云层,我只需要帮助编写代码,使脚本在完成1笔交易后停止。
Honest Knave: 我试过你的代码,我只是定义了缺少的magic_no,它工作得很好,它等待新的交易,价格再次触及云层,它对下一个项目真的很有用,但
我只是需要它在1个交易后停止,我应该怎么做?
谢谢你们的帮助
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
这就是问题所在。
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>-1)
{
order=1;
}
}
}
}
所以试试这个,我在前面的帖子中已经指出了这个问题。
还请注意,OrderSend要么返回票号,要么在失败时返回-1减去1。
Honest Knave: 我试过你的代码,我只是定义了缺少的magic_no,它工作得很好,如果价格再次触及云层,它就会等待新的交易,这对下一个项目确实很有用,但
我只需要它在一次交易后停止,我应该怎么做?
谢谢大家的帮助
它不应该交易超过1次...?这就是它的作用。
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
诚实的Knave。
你的EA很好,但是如果价格再次下降到一目连云层,然后再上升,它就会创建新的交易。它不会在同一根蜡烛上重复下单,就像我遇到的问题一样,我从你给我的这个样本中学到了很多,可以创建新的
但我需要一种方法来编码,在第一次交易后,EA或脚本将立即关闭,所以我只需要做一次交易。
马可:我试过你的新更新,但它没有做任何交易,我把你上次发布的方法,只是删除了第二个int,放在票据里。但在策略测试器上,第一笔交易从未完成,现在该怎么办?
诚实的Knave。
你的EA很好,但是如果价格再次下降到一目连云层,然后再上升,它就会创建新的交易。它不会在同一根蜡烛上重复下单,就像我遇到的问题一样,我从你给我的这个样本中学到了很多,可以创建新的
但我需要一种方法来编码,在第一笔交易后,EA或脚本将立即关闭,所以我只需要做一笔交易。
我不明白你的意思。
那段代码不能一次开出超过1个订单。
但是,如果订单关闭,而触发器再次发生,它将打开另一个。
你的意思是你希望永远只开一个交易吗?
我不明白你的意思。
这段代码不能一次打开超过1个订单。
但是,如果订单关闭,而触发器再次发生,它将打开另一个。
你的意思是你想永远只开一个交易吗?