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); }
是的,先生,我只做过一次交易,但你的例子很好,它将是非常有用的,可以作为创建新易的基础。
void 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(!trade_made && !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());
}
else t rade_made=true;
}
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,放在票据上。但在策略测试器上,第一笔交易从未进行,现在该怎么办?
它应该进行交易,因为。
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
//| One Order.mq4 |
//| Copyright 2017, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
bool order=0;int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
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;
}
}
}
}
}
}
//+------------------------------------------------------------------+
我刚刚试过,它下了一个订单......
非常感谢, 这正是我所需要的,我将永远感激不尽。
也感谢Marco先生的帮助。
非常感谢, 这正是我所需要的,我将永远感激不尽。
不客气。但你是否同意,答案很少像看起来那么简单?这可能解释了这里的一些评论CODE Help(紧急)。
我已经删除了那条评论,一个简单的EA对我来说是个问题,我真的什么都不知道,不知道说什么。
嘿,我们都还在学习。而且你的心是在正确的地方。
我很高兴你解决了你的问题。
有很多方法可以做同样的事情...马可和我从不同的方向解决了这个问题,而这两种方法同样正确。
好运
是的,Marco vd Heijden 先生,它和honest_knave的代码一样,我根据你最后的代码又试了一次,效果很好,我会采纳这两个答案,并在这个脚本中使用你的,因为它和原来的想法更相似。
谢谢你的帮助
我相信,从你发布的代码来看,该EA不会再开出订单。除非你把EA从图表中删除,然后再重新连接(初始化)。我想这就是目的所在?
现在让我们希望他选择正确的方向 :)
我在某处读到一个人忘记了他还有一个未平仓的头寸,你猜发生了什么... $$$$$
我相信,从你发布的代码来看,该EA不会再开出订单。除非你把EA从图表上移开,然后再重新连接(以初始化)。我猜这就是目的?