如何编码? - 页 197

 

有没有人可以帮助编码这个EA?

你好。

我目前正在用一个马丁格尔的EA进行交易,它最多可以开4级订单。我刚刚想到了一个对冲策略,可以减少使用这个EA的风险。以下是我的策略的描述。

1.对冲EA将监控开仓订单的缩减。如果总的浮动损失大于预先确定的数额,它将触发EA开出一个与开仓订单相反的对冲订单。

2.2.对冲订单的手数是根据最后一个开仓订单的手数的倍数(用户可以设置倍数)来计算的(例如,如果最后一个平仓订单的手数是1.6,倍数设置为2,那么对冲订单将以3.2的手数打开。

3.3.当对冲订单回到其开仓水平时,对冲订单将被自动关闭。

4.4.当整个篮子(开仓订单+对冲订单)达到预先确定的净利润数额时,所有订单将被关闭。

我想知道是否有好的程序员可以为我编码这个对冲EA。我认为它对其他马丁格尔EA也非常有用。非常感谢!

最好的问候。

华莱士

 

哇...

谢谢大家。

买入止损和卖出止损 的情况如何?

只要把 "买入 "改为 "卖出 "即可?

我只想为1个货币对建立2个头寸,不要超过这个数目。

对不起,我还是个新手...

 

如何在EA中编码这个indis?

你好,我是一个新的学习者,有兴趣学习mql,谁能告诉我如何将这个代码输入EA?

extern int Fast.MA.Period = 5;

extern int Slow.MA.Period = 34;

extern int Signal.period = 5;

//---- 缓冲区

double Buffer1[],

Buffer2[]。

b2[],

b3[];

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

//|自定义指标 初始化函数

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

int init()

{

//---- 指标

// 两个额外的缓冲区用于计数

IndicatorBuffers(4);

IndicatorShortName("MA_5_34")。

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); //向下 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //向上 225 233 241

SetIndexBuffer(1,b3);

//这些缓冲区不会被绘制出来,只是用来确定箭头。

SetIndexBuffer(2,Buffer1);

SetIndexBuffer(3,Buffer2);

//----

return(0);

}

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

//|Custor指示器的去初始化功能|

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

int deinit()

{

//----

return(0);

}

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

//|自定义指标迭代函数|

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

int start()

{

int i, counted_bars=IndicatorCounted();

双重MA5,MA34;

int limit=Bars-counted_bars;

Print(" print limit = ", limit);

if(counted_bars>0) limit++; <---- 谁能给我解释一下这意味着什么?

// 主线

for(i=0; i<limit; i++) <----,谁能给我解释一下这是什么意思?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i)。

MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i)。

Buffer1=MA5-MA34。

}

// 信号线

for(i=0; i<limit; i++) <----,谁能向我解释一下这意味着什么?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i)。

} <----,谁能向我解释一下这意味着什么?

// 箭头

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point;

如果(Buffer1 Buffer2)

b3 = Low-10*Point; <---- 谁能给我解释一下这意味着什么?

}

//----

return(0);

}

谢谢大家 =^_^=

 
liew_stanley:
if(counted_bars>0) limit++; <---- 谁能向我解释一下这意味着什么?

// 主线

for(i=0; i<limit; i++) <----,谁能给我解释一下这意味着什么?

// 信号线

for(i=0; i<limit; i++) <----,谁能向我解释一下这意味着什么?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i)。

} <----,谁能向我解释一下这意味着什么?

// 箭头

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point;

如果(Buffer1 Buffer2)

b3 = Low-10*Point; <---- 谁能向我解释一下这意味着什么?

谢谢大家=^_^=

这很简单。

当你开始你的indi时,Bars=1000(例如),counted_bars=0。所以limit=1000,你的indi计算所有的1000条。之后counted_bars=1000,每一个新的tick indi只计算最后一个(零)bar。当下一个条形图出现时,limit=1,indi重新计算最后两个条形图。

b3=Low-10*Point;-它只是一条比条形图的最低点低10点的线。

 
liew_stanley:
你好,我是一个新的学习者,有兴趣学习mql,谁能告诉我如何在EA中编码?

extern int Fast.MA.Period = 5;

extern int Slow.MA.Period = 34;

Extern int Signal.period = 5;

//---- 缓冲区

double Buffer1[],

Buffer2[]。

b2[],

b3[];

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

//|自定义指标初始化函数

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

int init()

{

//---- 指标

// 两个额外的缓冲区用于计数

IndicatorBuffers(4);

IndicatorShortName("MA_5_34")。

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); //向下 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //向上 225 233 241

SetIndexBuffer(1,b3);

//这些缓冲区不会被绘制出来,只是用来确定箭头。

SetIndexBuffer(2,Buffer1);

SetIndexBuffer(3,Buffer2);

//----

return(0);

}

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

//|Custor指示器的去初始化功能|

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

int deinit()

{

//----

return(0);

}

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

//|自定义指标迭代函数|

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

int start()

{

int i, counted_bars=IndicatorCounted();

双重MA5,MA34;

int limit=Bars-counted_bars;

Print(" print limit = ", limit);

if(counted_bars>0) limit++; <---- 谁能给我解释一下这意味着什么?

// 主线

for(i=0; i<limit; i++) <----,谁能向我解释一下这意味着什么?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i)。

MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i)。

Buffer1=MA5-MA34。

}

// 信号线

for(i=0; i<limit; i++) <----,谁能给我解释一下这意味着什么?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i)。

} <----,谁能向我解释一下这意味着什么?

// 箭头

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point;

如果(Buffer1 Buffer2)

b3 = Low-10*Point; <---- 谁能给我解释一下这意味着什么?

}

//----

return(0);

}

谢谢大家=^_^=

如果你想在EA中使用这个指标,你可以使用icustom()函数 来访问它。你真的不需要了解指标的任何代码,只需要了解它所吐出的数据。至少这是最简单的方法。

 
fxcourt:
如果你想在EA中使用这个指标,你可以使用icustom()函数来访问它。你真的不需要了解指标的任何代码,只需要了解它所吐出的数据。至少这是最简单的方法。

意思是说,在EA中使用函数 icustom()来调用indis? 在EA中应该如何编写编码? 能否给我一些指导?

谢谢

 
toiii:
哇...

谢谢大家。

买入止损和卖出止损的情况如何?

只要把 "买入 "改为 "卖出 "即可?

我只想为1个货币对建立2个头寸,不要超过这个数目。

对不起,我还是个新手...

阅读此文

MQL4教程

 

这是正确的编码吗?

extern double TakeProfit=100;

extern double Lots=1;

extern double TrailingStop=35;

extern int ShortEma = 5;

extern int LongEma = 34;

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

//| 专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

//|专家的去初始化功能|

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //向上

如果(line1<line2)current_direction = 2; //向下

如果(current_direction != last_direction) //改变了

{

last_direction = current_direction;

return (last_direction);

}

否则

{

返回(0)。

}

}

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

//|专家启动功能|

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

int start()

{

//----

int total;

double shortEma, longEma;

shortEma = iCustom(NULL,0, "Test_Demo",13,0,0);

longEma = iCustom(NULL,0, "Test_Demo",54,0,0);

Print("shortEma = " + shortEma + " : longEma = " + longEma)。

int isCrossed = 0;

isCrossed = Crossed (LongEma,ShortEma);

total = OrdersTotal();

if(total < 1)

{

如果(isCrossed == 1)

{

1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green)。

如果(1>0)

{

if(OrderSelect(1,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());

}

否则 Print("打开BUY订单错误。",GetLastError())。

return(0);

}

如果(isCrossed == 2)

{

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "My EA",12345,0,Red) 。

如果(2>0)

{

如果(OrderSelect(2,SELECT_BY_TICKET,MODE_TRADES))Print("Sell order opened : ",OrderOpenPrice());

}

否则 Print("打开卖出订单出错。",GetLastError())。

return(0);

}

return(0);

}

}

我得到一个错误,说1和2是意外的标记,这是什么意思?

谢谢

 

我猜你删除了一些东西,忘记了。

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red); if(2>0)

这是胡说八道。

 
liew_stanley:
extern double TakeProfit=100;

外置双数 Lots=1;

外置双数TrailingStop=35。

我得到一个错误,说1和2是意外标记,这是什么意思?

谢谢

在OrderSend(....)之前删除1=,和2=。

原因: