问吧! - 页 117

 

int start(){

如果(TimeCurrent()>D'2008.07.01 12:00:00'){Comment("EXPIRED"); return(0); }

...

return(0)。

}

amatrader:
请告诉我是否可以在EA中设置一个日期限制,我的意思是我是否可以在EA中设置一个到期日,一旦达到设定的日期,就停止交易。

它可能会说这样的话:-

检查日期,如果日期等于或大于(设定的日期)则不做任何事情。

这是英文版本,我需要MQL4版本...lol

如果有人能提供帮助,谢谢。
 
amatrader:
请告诉我,是否可以在EA中设置日期限制,我的意思是,我是否可以在EA中设置一个到期日,一旦达到设定的日期,就停止交易。

它可能会这样说:-

检查日期,如果日期等于或大于(设定的日期)则不做任何事情。

这是英文版本,我需要MQL4的版本...lol

如果有人能提供帮助,谢谢。

请看这个主题https://www.mql5.com/en/forum/174194

 

谢谢你,先生...非常感激。

 

每周的高低点。

有谁能像附件中的日线那样发布一个周线高低点指标?

或者为我把附件改为周线,谢谢。

谢谢。

附加的文件:
 
 

大家好

这是我正在使用的EA。谁能告诉我,为了让买入止损和卖出止损同时进行,应该怎么改。现在的方式是,要么触发买入止损,要么触发卖出止损,我希望两者都有。其次,我应该怎样做才能限制每个蜡烛的订单数量

我提前感谢大家。

以下是代码。

void start() {

//---- 检查历史和交易情况

if(Bars<100 || IsTradeAllowed()==false) return;

co=CalculateCurrentOrders(Symbol())。

CheckForSignals()。

如果(co>0) CheckForClose();

CheckForOpen();

co=CalculateCurrentOrders(Symbol())。

如果(mkt>0) {

BreakEvenStop(BreakEven,0)。

double pcnt =( (AccountEquity()-AccountBalance())/ AccountBalance())*100。

Print("Account Equity = ",AccountEquity())。

Print("账户余额=",AccountBalance())。

如果(pcnt>EquityGainPercent)

{

int total = OrdersTotal();

for(int i=total-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS)。

int type = OrderType();

bool result = false。

switch(type)

{

//关闭已开的多头头寸

case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo( OrderSymbol(), MODE_BID), 5, Red );

休息。

//关闭已开的空头头寸

case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ) 。

休息。

//关闭未决订单

case OP_BUYLIMIT :

case OP_BUYSTOP :

case OP_SELLLIMIT :

case OP_SELLSTOP : result = OrderDelete( OrderTicket() );

}

如果(result == false)

{

Alert("Order" , OrderTicket() , " failed to close.错误:", GetLastError())。

Sleep(3000);

}

}

Print("所有订单关闭-->锁定利润")。

}

return(0);

}

}

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

//|计算未平仓合约 |

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

int CalculateCurrentOrders(string symbol)

{

int ord; mkt=0;

//----

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 继续。

如果(OrderSymbol()==symbol && OrderMagicNumber()==MagicNumber) {

ord++。

如果(OrderType()==OP_BUY || OrderType()==OP_SELL) mkt++;

}

}

//---- 返回订单量

return(ord);

}

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

//| 检查未结订单情况 |

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

空白 CheckForSignals() {

//检查多头、空头、出场信号

buysig=false;

sellsig=false;

closebuy=false;

closesell=false;

remorder=false;

int isins,isouts,iskeyrev,is2brev;

如果(InsideBar) isins=IsInsideBar(shift);

如果(OutSideBar)isouts=IsOutSideBar(shift);

如果(KeyReversalBar) iskeyrev=IsKeyReversalBar(shift);

如果(TwoBarReversal) is2brev=IsTwoBarReversal(shift);

//长线进入信号条件

如果(isins>0 || isouts>0 || iskeyrev>0 || is2brev>0) {

buysig=true。

closesell=true。

}

//空头入场信号

如果(isins<0 || isouts<0 || iskeyrev<0 || is2brev<0) {

buysig=false;

sellsig=true。

closeebuy=true。

}

如果(last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {

remorder=true。

}

}

空白 CheckForOpen() {

int res,tr;

//---- 卖出条件

co=CalculateCurrentOrders(Symbol())。

如果(sellsig && lastsig!=-1) {

co=CalculateCurrentOrders(Symbol())。

如果(co==0) {

res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1) 。

}

lastsig=-1;

last=Time[0];

返回。

}

//---- 买入条件

if(buyysig && lastsig!=1) {

co=CalculateCurrentOrders(Symbol())。

如果(co==0) {

res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1) 。

}

last=Time[0];

lastsig=1;

返回。

}

}

void BreakEvenStop(int BES, int BELP) {

//移动止损以锁定一些利润

bool bres;

双倍的StopLoss。

如果 ( BES > 2 ) {

for (int i = 0; i < OrdersTotal(); i++) {

if ( OrderSelect (i, SELECT_BY_POS) == false ) 继续。

如果 ( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber ) 继续。

如果 ( OrderType() == OP_BUY ) {

如果 ( Bid < OrderOpenPrice()+BES*Point ) 继续。

StopLoss = OrderOpenPrice()+BELP*Point;

如果 ( StopLoss > OrderStopLoss() ){

bres=OrderModify(OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, White)。

if (!bres) Print("Error Modifying BUY order :",ErrorDescription(GetLastError())。

}

}

如果 ( OrderType() == OP_SELL ) {

if ( Ask > OrderOpenPrice()-BES*Point ) 继续。

StopLoss = OrderOpenPrice()-BELP*Point;

如果 ( StopLoss < OrderStopLoss() ){

bres=OrderModify(OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Gold)。

if (!bres) Print("Error Modifying SELL order :",ErrorDescription(GetLastError())。

}

}

}

}

返回。

}

int IsKeyReversalBar(int shift) {

//关键反转柱,关键柱的开盘应该比前一个柱子的高点至少高多少个点。

//关键条的收盘应该在前一个条的高点和收盘之间。当前条形图的开盘价应该是

//比关键条形图的收盘价低。卖出止损单应该放在关键条的低点上,如果它在接下来的4个条内没有被执行,那么就取消它。

//接下来的4个小节,然后取消该订单。请看下图--空头!

如果(Open[shift]=Low[shift+1] && Close[shift]Close[shift]) 返回(1)。

如果(Open[shift]>High[shift+1] && Close[shift]=Close[shift+1] && Open[shift-1]<Close[shift]) 返回(-1);

return(0);

}

int IsTwoBarReversal(int shift) {

//两柱反转,第一个柱子的开盘应该在前一个柱子的低点附近,收盘应该更低,而且

//有一个很好的大小体。第二根柱子的开盘价应该非常接近第一根柱子的收盘价,但两者都应该远远低于

//每根柱子的中点,收盘价应非常接近前两根柱子的低点。买入止损单应放置在第1条的高点。

//第1条的高点,如果它没有在4条内执行,则取消订单。见下图

如果(MathAbs(Open[shift+1]-Close[shift+1])> MathAbs(Open[shift+1]-Low[shift+2]) <=

MathAbs(Close[shift]-Low[shift+2])<=

MathAbs(Open[shift]-Close[shift+1]) &&

Close[shift+1]<(High[shift+1]+Low[shift+1])/2 &&

Open[shift]<(High[shift]+Low[shift])/2)

返回(1)。

如果(MathAbs(Open[shift+1]-Close[shift+1])> MathAbs(Open[shift+1]-High[shift+2])<=

MathAbs(关闭[shift]-低点[shift+2])<=

MathAbs(Open[shift]-Close[shift+1]) &&

Close[shift+1]>(High[shift+1]+Low[shift+1])/2 &&

Open[shift]>(High[shift]+Low[shift])/2)

返回(-1)。

return(0);

}

int OpenStop(int mode,double lot,double prc, int SL, int TP) {

int res,tr,col;

字符串邮件。

double openprice,sl,tp,stlev;

tries=0。

stlev=(1+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point。

while (res<=0 && tries<OrderTriesNumber) {

tr=0; while (tr<5 && !IsTradeAllowed() ) { tr++; Sleep(2000); }

RefreshRates()。

如果(模式==OP_SELLSTOP) {

如果(prc<=Bid-stlev) openprice=prc;

否则openprice=Bid-stlev。

如果(SL>0) sl=openprice+SL*Point;

如果(TP>0) tp=openprice-TP*Point;

col=Red。

} 否则

如果(模式==OP_BUYSTOP) {

如果(prc>=Ask+stlev)openprice=prc。

否则openprice=Ask+stlev。

如果(SL>0) sl=openprice-SL*Point;

如果(TP>0) tp=openprice+TP*Point。

col=Blue。

} else 返回。

Print(Ask," ",Bid," ",Symbol()," ",mode," ",lot," ",openprice," ",sl," ",tp," ") 。

res=OrderSend(Symbol(),mode,lot,openprice,slipage,tp,EAName+"_"+MagicNumber,MagicNumber,0,col)。

tries++;

}

如果(res<=0) Print("错误打开挂单。",ErrorDescription(GetLastError())。

return(res);

}

空白 CheckForClose() {

bool bres; int tr;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 继续。

如果(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) 继续。

//---- 检查订单类型

如果(OrderType()==OP_BUY && closebuy) {

bres=CloseAtMarket(OrderTicket(),OrderLots())。

继续。

}

如果(OrderType()==OP_SELL && closesell) {

bres=CloseAtMarket(OrderTicket(),OrderLots())。

继续。

}

如果(OrderType()==OP_BUYSTOP && (closebuy || remorder)) {

bres=DeletePending(OrderTicket())。

继续。

}

如果(OrderType()==OP_SELLSTOP && (closesell || remorder)) {

bres=DeletePending(OrderTicket())。

继续。

}

}

}

bool DeletePending(int ticket) {

bool bres=false; int tr;

tries=0;

while (!bres && tries<OrderTriesNumber) {

bres=OrderDelete(ticket)。

tries++;

tr=0; while (tr<5 && !IsTradeAllowed() ) { tr++; Sleep(2000); }

}

if (!bres) Print("Error deleting order :",ErrorDescription(GetLastError())。

返回(bres)。

}

 

有谁知道让EA只对某个账号 工作的代码吗? 谢谢!

 

它在这里https://www.mql5.com/en/forum/174194(第7号帖子)。

 

你有太多的这个人了

}
 
newdigital:
就在这里https://www.mql5.com/en/forum/174194(帖子#7)

谢谢newdigital。

我的初始化代码(其中有一个时间过期)是这样设置的。

int init()

{if (TimeCurrent()>D'2008.06.07 12:00:00'){Comment("Please renew your subscription"); return(0); }

return(0)。

}

}

if (Account != AccountNumber()){

Comment("用账户交易: "+AccountNumber()+" FORBIDDEN!")。

return(0);

}else {Comment(""); }

而现在我返回了这个错误。

'}'- 不平衡的括号

我在这里做错了什么? 另外,"int Account = 111111; "是否与EA的设置一致? 谢谢。