基本问题... - 页 2

 

我试着解释一下我自己。

假设我有3个不同的系统。

系统1在EUR/USD 1M图表上效果最好。

系统2在EUR/USD 5M图上效果最好。

系统 3 在 EUR/USD 1H 图表上效果最好。

现在我想让我的专家顾问在每个图表 上开一个头寸,不能再多了。换句话说,我想只为系统1打开1个位置,为系统2打开1个位置,为系统3打开1个位置。

你之前写的解决方案是限制每个符号1个头寸,现在我想限制每个图表类型1个头寸...

 

.换句话说,我想只为系统1开1个仓,为系统2开1个仓,为系统3开1个仓。

好的

那么你在每个系统中使用MAGIC号码

#property copyright "system 1"

#property link ""

#define MAGIC 01901

.

.

.

if ( ExistPosition() == False) {

OrderSend(Symbol(),op,Lots,pp,SLIPPAGE,ldStop,ldTake,lsComm,MAGIC,0,clOpen); // MAGIC = system 1

}

// if open 1 position only for system 1 MAGIC ?

bool ExistPosition() {

bool Exist=False;

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) Exist=True;

}

}

return(Exist);

}

你可以发布你的系统吗?

 

10x!

我没有具体的系统。这只是一个例子。

我是metaTrader的新手,这是我的一些基本问题 ...

一旦我写出好的东西,我会把它上传到这里征求意见...

 

如何使EA每支蜡烛交易一次?

我想知道是否有一段代码可以添加到EA中,使其每个蜡烛只交易一次。

谢谢

 
basza:
我想知道是否有一段代码可以添加到EA中,使其在每个蜡烛上只交易一次。 提前感谢

静态数据时间timeprev。

if(timeprev==Time[0]) {

return(0); //只在新条上执行。

} else if (timeprev==0) {

timeprev=Time[0]; //如果刚加入到图表中,什么都不做。

return(0);

} else {

timeprev=Time[0];

//在这里进行条形处理

}

 
ra300z:
static datetime timeprev;

if(timeprev==Time[0]) {

return(0); //只在新条上执行。

} else if (timeprev==0) {

timeprev=Time[0]; //如果刚加入到图表中则不做任何操作

return(0);

} else {

timeprev=Time[0];

//在这里进行条形处理

}

谢谢你ra300z

 

显示百分比目标?

你好

我想在EA中以注释的形式显示百分比目标。

我有这样一段代码,以注释的形式显示当前余额。

"百分比目标:" + AccountBalance()"/n"

在EA的开始,我有以下内容。

extern int ProfitPercentage=25;

现在我想做的是: 例如,5675.69美元*25%=1418.92美元,只显示1418.69美元。

预先感谢

 

hi guyss....

1:如何使EA只进行一次持续性的交易...(我指的是代码)。

例如,ma cross EA......当ma cross up并且目标为20点时,它将关闭,但当趋势继续时,它将尝试打开另一笔交易,因为fast ma仍然在slow ma之上。它只需要在ma cross down时打开另一笔交易。

快马>慢马=只需要一个交易信号

快马<慢马=也只需要一个交易信号

2:是否有办法在交叉点上设置时间延迟?我只知道pip seperation(不管他们怎么称呼它)意味着它将在穿越后等待10-15个点,然后才开启交易。

我只是一个试图学习MQ4语言的新手:)

 

一种方法是让EA查看历史上的MA读数,而不是当前的读数。原则上是这样的。

// Recognise past crossing (up or down)

if ( fast( past+1 ) slow( past ) )

then cmd = OP_BUY;

else if ( fast( past+1 ) >= slow( past+1 ) && fast( past ) < slow( past ) )

then cmd = OP_SELL;

else return;

// If processing reaches this point, then a trade decision of either OP_BUY

// or OP_SELL has been made, due to recognising a supporting MA crossing

// at "past" number of bars in history.

// Limit to only one trade in a direction

static int last_trade = -1;

if ( last_trade == cmd ) return;

last_trade = cmd;

// If processing reaches this point, then this processing is the first time

// that the supporting MA crossing is recognised.

这将在交叉点发生后的 "过去 "的条数 上做出决定,并且只允许在第一次检测到交叉点时进行交易。

 

感谢兄弟提供的代码...