如何编码? - 页 182

 

...

这不是代码中的错误

进入工具->历史中心,然后选择并下载你想测试的符号的1分钟数据(为了达到90%的准确度,你只需要1分钟的数据,不需要下载其他的)。

Badguy:
嗨,编码员

我还在学习MQL代码的第一步。

当我在日志中看到以下信息时,是什么原因呢?

Testgenerator:

不匹配的数据错误(在2009.05.06 19 15超过了体积限制)。

我必须在代码中寻找什么?

谢谢
 
abundance:
我的朋友和我正在开发一个EA。在某个阶段,它(EA)需要读取和检索某个时间的价格,比如,美国东部时间17:00...等等。

有哪位前辈能告诉我们如何做到这一点,而不是向后计算价格柱?也许已经有一个函数是这样写的。恳请帮助。谢谢大家,愿上帝保佑!

B rgds/丰富

iBarShift(.)可以帮助你找到图表上的条数,然后使用Close或Open。

 
Roger09:
iBarShift(...)可以帮助你找到图表上的条数,然后使用Close或Open。

谢谢你,罗杰。这很有帮助。很抱歉没有说得更清楚。我们需要买入和卖出价格。我们怎样才能得到它们呢?如果这是个愚蠢的问题,请原谅

B rgds/abundance

 

数据错误

嗨,mladen

谢谢你的快速回复。

我认为这不是tickdata的问题,因为当我用另一个EA测试时,它运行良好。

我想这是自定义指标的问题。

我将在下文中建立。AllAverages_v2.3

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,0) 。

现在我有以下信息:在iCustom函数中索引缓冲区的数量 无效。

如何正确定义这个iCustom?

嗨,mladen,我找到了问题所在

我忘了一个参数。颜色

正确的定义是

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,ALL_AVERA_COLOR,0) 。

mladen:
这不是代码中的错误 进入工具->历史中心,然后选择并下载你想测试的符号的1分钟数据(你需要的90%的准确度是1分钟的数据,不需要下载其他的)。
附加的文件:
 
abundance:
谢谢你,罗杰。这很有帮助。很抱歉没有说得更清楚。我们需要买入和卖出价格。我们怎样才能得到它们呢?如果这是个愚蠢的问题,请原谅 B rgds/abundance

图表上的所有价格都是买入价。Ask=Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point。

 

限制交易

所以我开始用那些模板生成的EA构建器编写一个基本的EA。我似乎已经掌握了EA模板的前提,但是我需要一种方法,使EA最大只能进入一个交易。现在,它一直在生成交易,并导致交易量的下降,这很荒谬。以下是交易批次的代码。

//检查位置

bool IsTrade = False;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。

如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) {

IsTrade = True。

如果(OrderType() == OP_BUY){

//关闭

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

//| 信号开始(退出买入)|

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| 信号结束(退出买入) |

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

如果(Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。

if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False。

继续。

}

//拖曳止损

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

如果(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。

if (!EachTickMode) BarCount = Bars;

继续。

}

}

}

} else {

//关闭

如果有人能提供帮助,我们将不胜感激。

 
Styex:
所以我开始用那些模板生成的EA构建器编写一个基本的EA。我似乎已经掌握了EA模板的前提,但是我需要一种方法来使EA最多只进入一个交易。如果有人能提供帮助,我将非常感激。
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

谢谢OnTheRoad

我发现了这个EA,我不太明白其中的一些内容。

bool get_signal()

{

bool enable_trade = false;

int trend_up = 0;

int trend_down = 0;

int i;

ArrayInitialize( TradeSign, false )。

if( Bars >= 100 ){

for( i = 0 ; i < DEF_MA_NUM ; i++ ){

Buf_MA[0][ i ] = calc_SMA( PERIOD_M30, MA_prm_1, i ) 。

Buf_MA[1][ i ] = calc_SMA( PERIOD_M30, MA_prm_2, i ) 。

Buf_MA[2][ i ] = calc_SMA( PERIOD_M30, MA_prm_3, i );

Buf_MA[3][ i ] = calc_SMA( PERIOD_M30, MA_prm_4, i );

Buf_MA[4][ i ] = calc_SMA( PERIOD_M30, MA_prm_5, i );

}

double vRSI = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 ) 。

double vRSI2 = iRSI( Symbol(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 );

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

trend_up++;

}

}

如果((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = true;

enable_trade = true;

}

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

trend_down++;

}

}

如果((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign[SIG_Sell] = true;

enable_trade = true;

}

}

return(enable_trade);

}

double calc_SMA( int timeframe, int period, int offset )

{

double vMA = 0;

double sum=0;

int i;

for( i = 0 ; i < period ; i++ ){

sum +=iClose( Symbol(), timeframe, i + offset ) 。

}

vMA = sum / period;

return(vMA);

}

有一个部分 "trendup>3",这是从数组中计算出来的吗?数组是如何工作的,所以可以给出 "trendup>3"?这是为了了解单线的平均数(该线可能会上升或下降)吗?我不明白它是如何工作的。
附加的文件:
 

如何在达到目标利润时重置专家? 我在使用马丁格尔策略,但它没有按顺序打开手数......

例如:手数0.1, 0.2, 0.4, 0.8, 1.6

打开手数:0.1, 0.2, 0.4 -> 在手数0.4处获利,但接下来的手数是0.8, 0.1, 0.2, 0.4...

有谁能帮忙吗?

int T=0;

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

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

有标准的高/低点

我试图编写一个指标,在说明一个蜡烛是真正的高点或真正的低点之前寻找特定的东西。 基本上是这样的标准(我附上了一个图表来帮助解释)。

1. 寻找低于之前所有20个收盘价的收盘价(第二个箭头是这个点),然后(2)12个柱子之后的收盘价必须高于之前的12个收盘价(第三个箭头)。 这种上升趋势将持续到(3)出现低于之前7个收盘价的收盘价(第四个箭头)。

我一直在尝试使用iLowest函数,但没有太大成功。 我认为我最好的办法是使用一个数组,但我对数组的了解有限。

有没有关于如何使用ArrayMinimum 和ArrayMaximum的想法或例子? 或者是否有办法让iLowest和iHighest发挥作用?

附加的文件:
原因: