如何编码? - 页 310

 

...

对于运行时的价差,使用这个。

double currentSpread = MarketInfo(Symbol().MODE_SPREAD);
Premeus:
我想在EA中显示实时点差的代码。 请给我一些建议。
 

谢谢你Malden。但我知道PHP代码是用于网络服务器的。 我不知道在EA方面的代码。或者说它是为别人而设的。

请告诉我更具体的信息。对不起,我是MQL4编程的新手。

我不确定当新的价格出现时,程序的哪一部分被执行。

是整个程序还是在旁边的init()或start()里面。

我想获得tick信息并显示出来,就像我问这个问题一样。

 

经验之谈

这是metatrader MQl 4的代码,用于获取当前符号的点差。只要把它复制到你的代码中,你就可以通过这种方式获得点差信息了。

这行代码应该在start()中,以便在每一个tick 上检查点差(因为它可以在每一个tick上改变)。一旦你调用了MarketInfo()函数,并且currentSpread变量被赋值,就可以使用currentSpread进行任何测试或任何你需要的进一步处理。

Premeus:
谢谢你,Malden。但我知道网络服务器的PHP代码,我不知道在EA方面的代码。或者说它是为别人而设的。

请告诉我更具体的信息。对不起,我是MQL4编程的新手。

我不确定当新的价格进来时,程序的哪一部分被执行。

是整个程序还是在init()边上或start()里面。

我想得到蜱虫的信息和显示,就像我问这个主题一样。
 

MartingailExpert_v1.0_Stochastic,如何?

你好!

谁能告诉我,为什么我不能在订单发送票中插入止损?

当我插入它时,EA就不工作了!

谢谢!

//+------------------------------------------------------------------+

//| aaa.mq4 |

//| 2007年,MetaQuotes软件公司版权所有。|

//|TeamWox Groupware / MetaQuotes Software Corp.|

//+------------------------------------------------------------------+

#property copyright "Copyright Š 2007, MetaQuotes Software Corp.

#property link "http://www.metaquotes.net"

外置双步=25。

extern int StepMode=0;

// ńëč StepMode = 0, ňî řŕă ěĺćäó îđäĺđŕěč ôčęńčđîâŕííűé č đŕâĺí step

// ǞǞ StepMode = 1, Ǟ Ǟ ďîńĺďĺííî óâĺëč÷čâŕĺňń˙。

外置双倍数proffactor=10。

外置双倍数mult=1.5。

外置双倍lotbuy=0.01。

extern double lotssell=0.01;

外置双倍数per_K=200。

extern double per_D=20;

extern double slow=20;

extern double zoneBUY=20;

extern double zoneSELL=80;

extern double Magicbuy=555;

外置双倍Magicsell=556;

double openpricebuy,openpricesell,lotbuy2,lotssell2,lastlotbuy,lastlotsell,tpb,tps,cnt,smbuy,smsell,lotstep,

ticketbuy,ticketell,maxLot,free,balance,lotell,lotbuy,dig,sig_buy,sig_sell,ask,bid。

int OrdersTotalMagicbuy(int Magicbuy)

{

int j=0;

int r;

for (r=0;r<OrdersTotal();r++)

{

如果(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))

{

如果(OrderMagicNumber()==Magicbuy) j++;

}

}

return(j);

}

int OrdersTotalMagicsell(int Magicsell)

{

int d=0;

int n;

for (n=0;n<OrdersTotal();n++)

{

如果(OrderSelect(n,SELECT_BY_POS,MODE_TRADES))

{

如果(OrderMagicNumber()==Magicsell) d++;

}

}

return(d);

}

int orderclosebuy(int ticketbuy)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。

如果(OrderSymbol() == symbol && OrderMagicNumber() ==Magicbuy)

{

ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotbuy2=OrderLots() ;

double bid = MarketInfo(symbol,MODE_BID);

RefreshRates()。

OrderClose(ticketbuy,lotbuy2,bid,3,Magenta)。

}

}

lotsbuy2=lotsbuy;返回(0)。

}

int orderclosesell(int ticketsell)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。

如果(OrderSymbol() == symbol && OrderMagicNumber() ==Magicsell)

{

ticketsell=OrderTicket();OrderSelect(t ticketsell, SELECT_BY_TICKET, MODE_TRADES);lotssell2=OrderLots() 。

double ask = MarketInfo(symbol,MODE_ASK);

RefreshRates()。

OrderClose(tasksell,lotssell2,ask,3, Lime)。

}

}

lotssell2=lotssell;返回(0)。

}

int start()

{

//----

double profitbuy=0;double profitsell=0;

字符串 = OrderSymbol();

double spread = MarketInfo(symbol,MODE_SPREAD);

double minLot = MarketInfo(symbol,MODE_MINLOT);

如果(minLot==0.01){dig=2;maxLot=MarketInfo(symbol,MODE_MAXLOT);}。

如果(minLot==0.1){dig=1;maxLot=((AccountBalance()/2)/1000); }

如果(OrdersTotalMagicbuy(Magicbuy)>0)

{

double smbuy;

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)。

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magicbuy)

{

ticketbuy = OrderTicket(); OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES);

smbuy = smbuy+OrderLots();openpricebuy = OrderOpenPrice(); lastlotbuy = OrderLots()。

}

}

{

如果(smbuy+(NormalizeDouble((lastlotbuy*mult),dig))<maxLot)

{

如果(StepMode==0)

{

如果(Ask<=openpricebuy-step*Point)

{

lotsbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotbuy2,dig),Ask,3,0,0, "MartingailExpert", Magicbuy,0,Blue)。

}

}

如果(StepMode==1)

{

如果(Ask<=openpricebuy-(step+OrdersTotalMagicbuy(Magicbuy)+OrdersTotalMagicbuy(Magicbuy)-2) *Point)

{

lotsbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotbuy2,dig),Ask,3,0,0, "MartingailExpert", Magicbuy,0,Blue)。

}

}

}

}

}

如果(OrdersTotalMagicsell(Magicsell)>0)

{

双倍的smsell。

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)。

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(t ticketsell,SELECT_BY_TICKET, MODE_TRADES)。

smsell = smsell + OrderLots();openpricesell = OrderOpenPrice();lastlotsell = OrderLots()。

}

}

{

如果(smsell+(NormalizeDouble((lastlotsell*mult),dig))<maxLot)

{

如果(StepMode==0)

{

如果(Bid>=openpricesell+step*Point)

{

lotssell2=lastlotsell*mult;

RefreshRates();t ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red) 。

}

}

如果(StepMode==1)

{

如果(Bid>=openpricesell+(step+OrdersTotalMagicsell(Magicsell)+OrdersTotalMagicsell(Magicsell)-2)*Point)

{

lotssell2=lastlotsell*mult;

RefreshRates();t ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red) 。

}

}

}

}

}

//xm7修改,改变信号产生的方式。旧代码在最后

double Stoch_0 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,0) 。

double Stoch_1 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1);

如果(OrdersTotalMagicbuy(Magicbuy)<1)

{

如果(Stoch_0 > zoneBUY && Stoch_1 <= zoneBUY)

ticketbuy = OrderSend(Symbol(),OP_BUY,lotbuy,Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue) 。

}

如果(OrdersTotalMagicsell(Magicsell)<1)

{

如果(Stoch_0 = zoneSELL)

ticketsell = OrderSend(Symbol(),OP_SELL,lotssell,Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)。

如果(OrderSymbol()==Symbol() && OrderMagicNumber() == Magicbuy)

{

ticketbuy = OrderTicket(); OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES); profitbuy = profitbuy+OrderProfit() ;

openpricebuy = OrderOpenPrice()。

}

}

tpb = (OrdersTotalMagicbuy(Magicbuy)*proffactor*Point)+openpricebuy;

double bid = MarketInfo(Symbol(),MODE_BID);

如果(profitbuy>0)

{

if (Bid>=tpb) orderclosebuy(ticketbuy);

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)。

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(t ticketsell,SELECT_BY_TICKET, MODE_TRADES);profitell = profitsell+OrderProfit();

openpricesell = OrderOpenPrice()。

}

}

tps = openpricesell-(OrdersTotalMagicsell(Magicsell)*proffactor*Point)。

double ask = MarketInfo(Symbol(),MODE_ASK);

如果(profitell>0)

{

如果(Ask<=tps)orderclosesell(t ticketsell)。

}

free = AccountFreeMargin();balance = AccountBalance()。

for (cnt=0;cnt< OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)。

如果(OrderSymbol()==Symbol() && OrderMagicNumber() == Magicbuy) ticketbuy = OrderTicket();

如果(OrderSymbol()==Symbol() && OrderMagicNumber() ==Magicsell) ticketsell = OrderTicket()。

}

如果(OrdersTotalMagicbuy(Magicbuy)==0)

{

profitbuy=0;ticketbuy=0;tpb=0。

}

如果(OrdersTotalMagicsell(Magicsell)==0)

{

profitsell=0;ticketell=0;TPS=0。

}

Comment("FreeMargin = ",NormalizeDouble(free,0)," Balance = ",NormalizeDouble(balance,0)," maxLot = ",NormalizeDouble(maxLot,dig), "/n",

"Totalbuy = ",OrdersTotalMagicbuy(Magicbuy)," Lot = ",smbuy," Totalsell = ",OrdersTotalMagicsell(Magicsell)," Lot = ",smsell,"\n",

"---------------------------------------------------------------","\n","Profitbuy = ",profitbuy,"\n",

"Profitsell = ",profitell)。

//----

for(int ii=0; ii<2; ii+=2)

{

ObjectDelete("rect "+ii);

ObjectCreate("rect "+ii,OBJ_HLINE, 0, 0,tps);

ObjectSet("rect "+ii, OBJPROP_COLOR, Red);

ObjectSet("rect "+ii, OBJPROP_WIDTH, 1);

ObjectSet("rect "+ii, OBJPROP_RAY, False);

}

for(int rr=0; rr<2; rr+=2)

{

ObjectDelete("rect1"+rr);

ObjectCreate("rect1"+rr,OBJ_HLINE, 0, 0,tpb);

ObjectSet("rect1"+rr, OBJPROP_COLOR, Blue);

ObjectSet("rect1"+rr, OBJPROP_WIDTH, 1);

ObjectSet("rect1"+rr, OBJPROP_RAY, False);

}

return(0);

}
 

...

这可能有几个原因,但最常见的是:

- 止损和/或止盈离 当前价格太近了

- 你的经纪商是ECN/STP类型的经纪商,在这种情况下,你首先要把订单的止损和获利设置为0,只有当订单被打开时,你才能把止损和/或获利修改为所需的值(当然要尊重前面的观点)。

pearl1:
你好!

谁能告诉我,为什么我不能在订单发送票中插入止损?

当我插入它时,EA就不工作了!

谢谢!
 

大家好,我想知道 如何在图表上获得最新的当前价格?我知道这是一个新手,但我似乎找不到答案。请帮助。谢谢。

谢谢。

特伦斯

 

...

取决于哪一个。

- 当前买入价是买入价

- 当前卖出价是卖出价

- 任何其他价格:使用指数0表示当前价格,因此Close[0]是当前收盘价,Open[0]是当前开盘价,以此类推。

tkuan77:
大家好,我想检查一下我如何在图表上获得最新的当前价格?我知道这是一个新手,但我似乎找不到答案。请帮助。谢谢。

监管

特伦斯
 

嗨,Mladen,我想做的是一个检查。例如,如果当前价格高于SMA100,我将放大到一个较低的时间框架,只看买入信号。但如果我使用买入价或卖出价,系统就不能决定我目前是看多还是看空,因为买入价我应该看多,反之则看卖出价(如果我错了请纠正我)。

我心中的概念与检查部分的3只鸭子交易系统有些类似。请在此给我建议。谢谢。

谢谢

特伦斯

mladen:
要看是哪一个:
- 当前买入价是Bid

- 当前卖出价是Ask

- 任何其他价格:使用指数0作为当前价格,所以Close[0]是当前收盘价,Open[0]是当前开盘价,以此类推

 

...

特伦斯

在这种情况下,使用Close[0]。几乎所有的EA都在使用close来达到这个目的,所以我想它也会对你有用。

tkuan77:
你好,Mladen,我想做的是一个检查。例如,如果当前价格高于SMA100,我将放大到一个较低的时间框架,只看买入信号。但是,如果我使用买入价或卖出价,系统不能决定我目前是看多还是看空,因为买入价我应该看多,反之则是看空(如果我错了,请纠正我)。

我心中的概念与检查部分的3只鸭子交易系统有些类似。请在此给我建议。谢谢。

谢谢

特伦斯
 

EA不在价格变动之间运行

我注意到我的EA没有在M1时间段的价格变动之间运行。我知道EA会在每一个tick 进来的时候 被执行。

但我看到它是在每一个新条形开始时执行的。

我是不是理解错了?

有什么方法可以强制EA在每一个点位进入时执行吗?

我试图通过使用利润和亏损来控制我的利润和亏损, ,而不是用点数。 当尖峰发生时,EA在达到设定的利润或损失时不关闭订单,直到新的栏位出现。

有谁能帮助我解决这个问题?

我是EA编码的新手。

谢谢你的帮助。

原因: