如何编码? - 页 58

 

我以为我已经解决了这个问题,但是没有。

我想做的是在图表和日志中写上评论,说明是用哪种输入条件来打开当前的位置。

以前有没有人这样做过,你是怎么做的,因为我已经尝试了一段时间,但运气不好,而且也不像我想象的那么容易。

下面是我最新的尝试。

任何帮助都将是巨大的

Buyysig = Long || Long2 || Long3 || Long4。

sellsig = Short || Short2 || Short3 || Short4。

closebuy=sellsig。

closesell=buysig。

如果(curprof>=AccountEquity()*ProfitExit/100.0) {

exit=true。

}

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

remorder=true。

}

}

空白 CheckForOpen() {

int res,tr;

//---- 卖出条件

co=CalculateCurrentOrders(Symbol())。

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

if ( Short == true)Print(" Short signal taken " )。

if ( Short2 == true)Print(" Short2 signal taken ");

if ( Short3 == true)Print(" Short3 signal taken ");

if ( Short4 == true)Print(" Short4信号已被接受")。

co=CalculateCurrentOrders(Symbol())。

如果(co==0) {

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

}

lastsig=-1;

last=Time[0];

返回。

}

//---- 买入条件

co=CalculateCurrentOrders(Symbol())。

如果( buysig && lastsig!=1) {

if ( Long == true) Print(" Long signal taken " );

if ( Long2 == true)Print(" Long2 signal taken ");

if ( Long3 == true)Print(" Long3信号已获取");

如果(Long4 == true)Print(" Long4信号已获取")。

co=CalculateCurrentOrders(Symbol())。

如果(co==0) {

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

}

last=Time[0];

lastsig=1;

返回。

}

}

bool CloseAtMarket(int ticket,double lot) {

//容错的市场订单关闭

bool bres=false; int tr;

tries=0;

while (!bres && tries<OrderTriesNumber) {

RefreshRates()。

bres=OrderClose(ticket,lot,OrderClosePrice(),slipage,White)。

tries++;

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

}

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

}

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)。

 

这款EA甚至无法编译,止损应该是你最关心的问题。 有5个变量中的空格是随机的,或者第一个字母没有大写!

 
jturns23:
这个EA甚至不能编译,止损应该是你最关心的。 有5个变量中的空格是随机的,或者第一个字母没有大写!

这里是修复版。

但这仍然不能建立任何头寸,因为代码中没有决定如何建立多/空头寸的逻辑。

附加的文件:
 
 

对这个EA的帮助

Michel:
这个CHinGsMAroonCLK是谁?

在我的印象中,这个EA只不过是elCactus的10p3,但也许我错了......。

检查它的主题,你可能会发现你正在寻找的东西:https://www.mql5.com/en/forum/174975

好的......所以现在的问题是我不能为这个EA设置止损,代码是什么? 可以帮助我吗? 谢谢

 

没有交易区 - 代码帮助

大家好。

我试图调整一个代码,但经过很多努力,我还是没能把它弄好。如果你们有人不介意的话,可以看看这个。

我们的想法是,如果价格区间与前次交易在同一区域,则停止下一次交易。多头交易将检查 最后一次开仓多头交易的区域,而空头交易将检查最后一次开仓空头交易的区域。

例如,如果第一笔长线交易在1.4000,那么第二笔长线交易将只在价格离开该区域(20点区域)小于1.3990和大于1.4010时触发。

谢谢大家。

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

//| 横向市场的过滤器 - 防止在类似的价格范围内进行多次交易,并创建禁止交易区。

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

外置 int Zone1 = -10; // (低区)

外来的int Zone2 = 10; // (上部区域)

//在上一个交易的-10和+10之间的无交易区

bool CheckZone(int type)

{

int cnt = OrdersTotal();

for (int i=0; i < cnt; i++)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 继续。

如果(OrderSymbol() != Symbol())继续。

如果(OrderMagicNumber() != Magic)继续。

如果 (OrderType() != type) 继续。

如果(type == OP_BUY)

{

if( (Bid - OrderOpenPrice()) > Zone1*Point && (Bid - OrderOpenPrice()) < Zone2*Point ) return(false);

}

如果(type == OP_SELL)

{

if( (OrderOpenPrice()-Ask) > Zone1*Point && (OrderOpenPrice()-Ask) < Zone2*Point ) return(false);

}

}

返回(true)。

}

 

解决EA问题

所有的MQL程序员,你们好。

请检查以下代码,并告诉我为什么在我的模拟账户 中不能进行交易。它是GJ 1m上的好EA,但不幸的是,它不能工作。谁能修复它,使它成为一个没有错误的EA。

我很感激。

最好的问候。

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

外置int Length1 = 3;

extern int Length2 = 10;

extern int Length3 = 16;

double Histo[];

double MaHisto[];

double up[];

double dn[];

double upMode[];

双倍 dnMode[]。

int alertBar;

int init()

{

返回(0)。

}

int deinit()

{

return(0);

}

int start()

{

int limit;

int counted_bars=IndicatorCounted();

如果(counted_bars<0) counted_bars=0;

如果(counted_bars>0) counted_bars--。

limit=Bars-counted_bars。

for(int i = 0 ;i <= limit ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i) 。

for(int j = 0 ;j <= limit ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);

for(int m = 0 ;m <= limit ;m++)

{

如果(MaHisto[m+1] 0)

{

up[m] = Open[m]-(5*Point);

如果(Bars > alertBar && m == 0)

{

//Alert(Symbol()+" "+Period()+" KI LONG ",Ask)。

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,Red) 。

alertBar = Bars;

}

}

else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)

{

dn[m] = Open[m]+(5*Point)。

如果(Bars > alertBar && m == 0)

{

OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,Red)。

alertBar = Bars;

}

}

否则

{

up[m] = EMPTY_VALUE;

dn[m] = EMPTY_VALUE。

}

如果( MaHisto[m] > 0 )

{

upMode[m] = High[m];

dnMode[m] = Low[m]。

}

否则,如果( MaHisto[m] < 0 )

{

dnMode[m] = High[m];

upMode[m] = Low[m]。

}

}

return(0);

}

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

 
arsenic786:
你好,所有的MQL程序员。

请检查以下代码,并告诉我为什么在我的模拟账户中不能进行交易。这是在GJ 1米上的好EA,但不幸的是它不能工作。谁能修复它并使它成为一个没有错误的EA。

我很感激。

最好的问候。

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

外置int Length1 = 3;

extern int Length2 = 10;

extern int Length3 = 16;

double Histo[];

double MaHisto[];

double up[];

double dn[];

double upMode[];

双倍 dnMode[]。

int alertBar;

int init()

{

返回(0)。

}

int deinit()

{

return(0);

}

int start()

{

int limit;

int counted_bars=IndicatorCounted();

如果(counted_bars<0) counted_bars=0;

如果(counted_bars>0) counted_bars--。

limit=Bars-counted_bars。

for(int i = 0 ;i <= limit ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i) 。

for(int j = 0 ;j <= limit ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);

for(int m = 0 ;m <= limit ;m++)

{

如果(MaHisto[m+1] 0)

{

up[m] = Open[m]-(5*Point);

如果(Bars > alertBar && m == 0)

{

//Alert(Symbol()+" "+Period()+" KI LONG ",Ask)。

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,Red) 。

alertBar = Bars;

}

}

else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)

{

dn[m] = Open[m]+(5*Point)。

如果(Bars > alertBar && m == 0)

{

OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,Red)。

alertBar = Bars;

}

}

否则

{

up[m] = EMPTY_VALUE;

dn[m] = EMPTY_VALUE。

}

如果( MaHisto[m] > 0 )

{

upMode[m] = High[m];

dnMode[m] = Low[m]。

}

否则,如果( MaHisto[m] < 0 )

{

dnMode[m] = High[m];

upMode[m] = Low[m]。

}

}

return(0);

}

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

"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,R ed); "

你是以Ask价格卖出的,应该是Bid。

评论栏应该是"",而不是0。

25作为SL应该是Bid+25*Point。

15作为TP应该是Bid-15*Point。

"R ed "不是一种颜色。

 
Michel:
"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,R ed); "

你是以Ask价格出售,应该是Bid。

评论栏应该是"",而不是0。

25作为SL应该是Bid+25*Point。

15作为TP应该是Bid-15*Point。

"R ed "不是一种颜色。

非常感谢您的支持!

但是,我仍然面临着问题, ,对MQL一无所知。请您把代码复制粘贴到mq4文件中,并在演示中进行测试,然后告诉我是否运行良好。您的支持将被视为最亲切的帮助米歇尔。

最好的问候。

Kashif.

 

不,对不起,我现在没有足够的时间。

几小时后,我将乘船回我家过圣诞节......没有更多的电脑了......