如何编码? - 页 206

 

使用外部*.set文件

我试了又试,但还是搞不清楚,所以希望有人能透过森林看到这棵树。

我想对EA进行编程,使其使用自己的编程设置或使用外部*.set文件。

所以,如果。

extern bool UseExternSet = true;

它将使用外部设置文件中的设置,而不是编程的设置。

我知道这是可以做到的,但我不知道该怎么办。

任何EA的例子都可以。

伯纳德

 

编译器问题还是代码问题?

extern int ma1period=5;

extern int ma1method=1;

extern int ma1tf=0;

extern int ma2period=5;

extern int ma2method=1;

extern int ma2tf=10080;

extern double lots=1;

int init(){}

int deinit(){}

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

return(MA)

}

int start()

{

int BarsCount=0;

if (Bars> BarsCount)

{

BarsCount=Bars;

double ma1.1=CMA(ma1tf,ma1period,1,ma1method);

double ma1.2=CMA(ma1tf,ma1period,2,ma1method);

double ma2.1=CMA(ma2tf,ma2period,1,ma2method);

double ma2.2=CMA(ma2tf,ma2period,2,ma2method);

bool ma1upsignal =ma1.2<ma1.1;

bool ma1downsignal =ma1.2>ma1.1;

bool ma2upsignal =ma2.2<ma2.1;

bool ma2downsignal =ma2.2>ma2.1;

if (ma1upsignal&&ma2upsignal)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green);

}

if (ma1downsignal&&ma2downsignal)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green);

}

if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal))

{

int total=OrdersTotal(); //Script to close all open orders.

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

{

OrderSelect(i, SELECT_BY_POS);

int type = OrderType();

switch(type)

{

//Close opened long positions

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

break;

//Close opened short positions

case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

}

}

}

}

这是我正在处理的一段代码。编译器说 "变量BarsCount未被定义"。我应该怎么做?在我看来,这个变量已经被初始化并给了一个值。

这是我的编译器问题还是代码问题?

附加的文件:
capture2_1.png  12 kb
 

[代码]

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

返回(MA)

}

 
username1:
[代码]

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

返回(MA)

}

米歇尔。

谢谢。这就解决了问题。 :-)

 

计算连续的条形图

谁有一些关于如何计算连续买入/卖出条的代码? 我想计算图表上有多少次(输入要检查的条数)连续出现1个卖出条,连续出现32个卖出条,连续出现3个卖出条,连续出现4个卖出条(和买入条一样)等等。

我知道我需要进行循环,但我不知道如何进行。

结果可以放在Comment()中。

谢谢。

 

为什么我的程序不工作?

我写了一个简单的程序。

它应该是一次只输入一个订单,并以获利或止损方式退出。

它是为英镑兑美元的M30设置的。

也就是说:程序中的一些常数是通过 "眼球 "估计出来的。这应该不会对程序产生很大的影响......它也不会在不同的常数下工作。(至少,当用策略测试器 测试时,设置为快速或中等:而不是 "逐点"。(太慢了...)

总之,这个程序在测试时没有输入订单,也没有在 "上升 "方向上进行检查。(这一点,通过 "打印"/跟踪)。

(它应该检查:以买入或以卖出的方式进入)。

偶然的逻辑:检查2个连续的小节。如果条形图1有:一个较高的高点和一个较高的低点,程序认为下一个条形图将是向上的。

(与之相对应的是下跌。)

获利和止损相应地被设置。

当 "如果 "语句被嵌套时,该程序也不工作....。

谢谢你看这个。

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

//|专家初始化功能

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

//|专家启动功能|

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

int start()

{

//----

bool TrendUp1; double TakeProfitUp; double EE = .00500;

bool OrdTot_OK;double lot;double slip;

double SL_Trailing_Up;bool High2Up;bool Low2Up;

int ticketup;int ticketdown;bool DownAndBig;bool UpAndBig;

bool TrendDown; double SL_Trailing_Down; double TakeProfitDown;

bool High2down; bool Low2down。

int ABC = OrdersTotal();

double Size1 = .00630;bool BigUp; double A = High[1]; double B= Low[2]; //41

double C= High[2]; double D= Low[1];bool BigDown;

//------------------------------------down订单开始

如果(ABC == 0)//没有订单出来是真的

OrdTot_OK = true。

如果(ABC == 0)//没有订单出局为真

打印("在下跌订单序列中,没有订单出局")。

如果((C-D) > Size1)//2的高点减1的低点>.0063

BigDown = true。

如果((C-D) > Size1)//2的高点减去1的低点 > .0063

Print ("在下跌订单序列中,发现了一个大的向下突破")。

如果(High[1]<High[2])

High2down=true。

如果(High[1]<High[2])

Print ("在向下的订单序列中,连续的条形图有递减的高点")。

如果(Low[1]< Low[2])

Low2down=true。

如果(Low[1]<Low[2])

Print ("在下单序列中,连续的条形图有递减的低点")。

如果(High2down && Low2down)

TrendDown=true。

如果(High2down && Low2down)

Print ("在下跌订单序列中,TrendDown标志被设置")。

如果(TrendDown)

SL_Trailing_Down = High[1];

如果(TrendDown)

Print ("在下跌订单序列中,确实设置了止损")。

如果(TrendDown)

TakeProfitDown = Bid - (.005);

如果(TrendDown)

Print ("在下跌订单序列中,得到了一个止盈", TakeProfitDown);

如果(TrendDown && BigDown)

DownAndBig = true。

如果(DownAndBig && OrdTot_OK)

ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue)。

如果(DownAndBig && OrdTot_OK)

Print ("在下跌订单序列中,试图输入一张票", ticketdown);

如果(ticketdown < 0)

Print("OrderSend_Down失败,错误#",GetLastError())。

return(0);

//----------------------------------------------down order done

//---------------------------------------------------up order start

如果(ABC == 0)

OrdTot_OK = true。

如果(ABC == 0)

打印("在上升序列中,没有订单出来")。

如果 ((A - B) > Size1)

BigUp = true。

如果((A - B) > Size1)

Print ("在上升序列中,两个柱子的大小测试是确定的")。

如果(High[1] > High[2])

High2Up = true;//44

如果(High[1] > High[2])

Print ("在上升序列中,增加高点的测试是确定的")。

如果(Low[1] > Low[2])

Low2Up=true。

如果(Low[1] > Low[2])

Print ("在上升序列中,对增加的低点的测试是确定的")。

如果(High2Up && Low2Up)

TrendUp1=true。

如果(High2Up && Low2Up)

Print ("在上升序列中,确实设置了上升的标志")。

如果(TrendUp1)

SL_Trailing_Up = Low[1] ;

如果(TrendUp1)

Print ("在上升的序列中,建立了止损")。

如果(TrendUp1)

TakeProfitUp = Ask + (.005);

如果(TrendUp1)

Print ("在上升的序列中,建立了止盈", TakeProfitUp);

如果(TrendUp1 && BigUp)

UpAndBig = true。

如果( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up, TakeProfitUp,Red);

如果(UpAndBig && OrdTot_OK)

Print ("在上升序列中,试图发送一个订单",ticketup)。

如果(ticketup < 0)

Print("OrderSend_Up failed with error #",GetLastError())。

return(0);

//-------------------------------------------------up order done

//----

return(0);//不确定这一行的情况

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

//----

return(0);

}

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

 

交易前/后的最小条数

你好。

你好,我是MT4的新手。谁能告诉我,如何在EA中设置限制,要求至少有 "x "个柱子才能开立新的头寸或关闭之前的头寸?

(不使用睡眠命令)

请注意。

 

mql编码帮助

if (iMA(NULL, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2;

---------------------------------------------------------------

这是什么意思呢?

使用了2个LWMA ?

LWMA周期=24 shift =0 on price weighted (hcll4) cross over LWMA周期120 shift =1 on price weighted (hcll4) then buy or sell ?

 

关闭位置的问题

你好。

我刚刚开始使用我的新EA,开仓是好的,我设置了tp和sl。EA的开仓和平仓都是一个一个的,从来没有超过一个订单。但我想在某些指标在sl或tp限制前提醒我的情况下关闭头寸。

如果我尝试像这样的操作。

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

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

if (OrderSymbol()==Symbol()) {

Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing

}

}

}[/CODE]

Nothing happened. Doesn't find any opened positions and I know there is 1.

If I try something like this:

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

CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3);

}

Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared.

If I try direcly by number to close:

[CODE]

Ans=OrderClose(0,alLots,Bid,2);// Order closing

我得到的错误信息是4107或4105,说股票是无效的。

谁能检查一下 这个问题和我附件中的EA并提供帮助?

谢谢

附加的文件:
rsiproba.mq4  6 kb
 

iHighest iLowest 澄清

假设有3个柱子。栏[2],栏[1]和栏[0](当前)。

下面的 "stop_low() "函数是否能正确地找到条形[2]和[3]的最低点?

double stop_low = iLowest(Symbol(),0,1,2,1);

------------------------------------------------------------

参考。

int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

根据类型,返回最小值在特定时间段内的位移。

参数。

symbol - 符号,其数据应被用于计算指标。NULL表示当前符号。

timeframe - 时间框架。它可以是任何一个时间框架的枚举值。0表示当前图表的时间框架

type - 系列数组标识符。它可以是系列数组标识符的任何一个枚举值。

count - 进行计算的周期数(从开始条形到后面条形的方向)。

start - 显示相对于当前条形图的条形图,数据应从该条形图中获取。

示例。

//计算范围内10个相关条形的最低值

//从当前图表上的第10条到第19条(含)的指数。

double val=Low;

原因: