如何编码? - 页 50

 

从一个指标中恢复一个数据类型

你好

是否有可能从一个指标(3MA交叉w警报)中恢复一个数据类型,将其放入EA中?

这是我想做的。

在指标(3MA Cross w alert)中,我放了一个数据类型。

double execute_trade = "ok_buy" orexecute_trade = "ok_sell" 这里。

************Indicator ************

如果((fasterMAnow > slowerMAnow &&)

fasterMAprevious <= slowerMAprevious && 。

fasterMAafter > slowerMAafter &&

中等的MAnow > slowerMAnow )

||

(较快的MAnow >较慢的MAnow &&

中等水平的>较慢水平的 && 。

中度MAprevious <= 慢度MAprevious &&

(mediumMAafter > slowerMAafter ))

{

CrossUp = Low - Range*0.5;

string execute_trade = "ok_buy";

}

如果((fasterMAnow < slowerMAnow &&)

fasterMAprevious >= slowerMAprevious &&...

fasterMAafter < slowerMAafter &&

中度MAnow < slowerMAnow )

||

(较快的MAnow <较慢的MAnow &&

中度MAnow < 较慢的MAnow &&

中度MAprevious >= 慢度MAprevious &&

中度MAafter < slowerMAafter ))

{

CrossDown = High + Range*0.5;

execute_trade = "ok_sell";

}

************************

我想在我的EA中恢复 "excute_trade",像这样。

***********EA***************

如果(excute_trade=="ok_buy")

订单 = SIGNAL_BUY;

如果(excute_trade=="ok_sell")

订单 = SIGNAL_SELL。

****************************

但我不知道如何做

请帮助我

最好的问候

附加的文件:
 
Julia:
谁能好心地告诉我,如何编写下面的代码?

如果我的Ea是在M30图表上打开的,我希望代码能说。

如果(在M5时间框架上,今天的收盘价高于昨天的收盘价)

{

.........

}

今天的收盘价是当前的BID;昨天的收盘价是独立于时间框架的,所以不管是M30还是M5时间框架。

if(Bid > iClose(NULL,PERIOD_D1,1))

{

...

}

 
natsirte:

是否有可能从一个指标(3MA交叉w警报)中恢复一个数据类型,并将其放入EA?

这是我想做的。

在指标(3MA Cross w alert)中,我放了一个数据类型。

double execute_trade = "ok_buy" orexecute_trade = "ok_sell" 这里。

************Indicator ************

如果((fasterMAnow > slowerMAnow &&)

fasterMAprevious <= slowerMAprevious && 。

fasterMAafter > slowerMAafter &&

中等的MAnow > slowerMAnow )

||

(较快的MAnow >较慢的MAnow &&

中等水平的>较慢水平的 && 。

中度MAprevious <= 慢度MAprevious &&

(mediumMAafter > slowerMAafter ))

{

CrossUp = Low - Range*0.5;

string execute_trade = "ok_buy";

}

如果((fasterMAnow < slowerMAnow &&)

fasterMAprevious >= slowerMAprevious &&...

fasterMAafter < slowerMAafter &&

中度MAnow < slowerMAnow )

||

(较快的MAnow <较慢的MAnow &&

中度MAnow < 较慢的MAnow &&

中度MAprevious >= 慢度MAprevious &&

中度MAafter < slowerMAafter ))

{

CrossDown = High + Range*0.5;

execute_trade = "ok_sell";

}

************************

我想在我的EA中恢复 "excute_trade",像这样。

***********EA***************

如果(excute_trade=="ok_buy")

订单 = SIGNAL_BUY;

如果(excute_trade=="ok_sell")

订单 = SIGNAL_SELL。

****************************

但我不知道如何做

请帮助我

最好的问候

你必须使用iCustom 函数来检索缓冲区的值(即箭头)。

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

计算指定的自定义指标并返回其值。自定义指标必须被编译(*.EX4文件),并且在terminal_directory/experts/indicators目录下。

参数。

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

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

name - 自定义指标编译的程序名称。

... - 参数设置(如果需要)。传递的参数和它们的顺序必须与自定义指标的声明顺序和外部变量的类型一致。

mode - 线路索引。可以是0到7,必须与SetIndexBuffer函数之一使用的索引对应。

shift - 从指标缓冲区中提取的数值的索引(相对于当前的条形图,在给定的时间段之前移动)。

示例。

double val=iCustom(NULL, 0, "SampleInd",13,1,0)。

在你的例子中,语法应该是 。

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 0, 0) > 0) // Buy

{

...

}

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 1, 0) > 0) // Sell

{

...

}

参数p1到p10是作为外部参数发送给指标的值。例如,p1表示分配给FasterMA的值,p2表示FasterShift,以此类推,直到最后一个外部声明p10 SoundAlert。请看指标的代码以了解它们的顺序和意义。

 

谢谢你,米歇尔。

但如果代码在指标代码中呢?

是不是这样。

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1]) ?????

 
Beno:
今天,我正在慢慢地修复我的一些EA中的错误(在这个过程中也学到了很多东西),但这是什么意思?

2007.10.24 21:22:24 1998.11.20 06:00 The Abyss GBPJPY,Daily:OrderSend函数的参数6是无效的双数

我找不到关于这个错误的任何东西,我应该看什么。

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

如你所见,参数 六是止损。请确保你的止损被定义为一个int。接下来,确保在你的OrderSend()命令中,你将止损乘以点。这将转换为你所交易的货币的正确双数。

长线的例子。

ticketa=OrderSend(Symbol(),OP_BUY,lotsize,Ask,slip,Ask-intStopLoss*Point,Ask+intTakeProfit*Point, "Comment",magic,0,Green)。

简而言之的例子。

ticketb=OrderSend(Symbol(),OP_SELL,lotsize,Bid,slip,Bid+intStopLoss*Point,Bid-intTakeProfit*Point, "Comment",magic,0,Blue) 。

希望这有帮助。

 

谢谢你,Wolfe

这对我帮助很大,但也带来了一个新的问题, ,它现在可以买入,但没有卖出,也没有在正确的地方卖出。我一直试图买入所有三个指标都是蓝色的,卖出时都是红色。

我想我已经为这个EA选择了正确的名字 "深渊",因为我正坐在那里试图用代码解决我的问题。大笑

2007.11.24 10:14:44 2007.11.23 12:00 The Abyss EURUSD,H4: Error openingSELL order: 0

空格 CheckForSignals() {

double TML=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,0,shift) 。

double TMS=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,1,shift);

double hasOpenLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,1,shift) ;

double hasCloseLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,3,shift) ;

double hasOpenShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,0,shift) ;

double hasCloseShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,2,shift) ;

double SDLL=iCustom(NULL,0, "Slope Direction Line",period,method,price,0,shift);

double SDLS=iCustom(NULL,0, "斜率方向线",周期,方法,价格,1,移位);

buysig=false;

sellsig=false;

closebuy=false;

closesell=false。

bool Long1 = TML;

bool Short1 = TMS;

bool Long2 = SDLL;

bool Short2 = SDLS;

bool Long3 = hasOpenLong > hasCloseLong;

bool Short3 = hasOpenShort < hasCloseShort;

buysig = Long1 && Long2 && Long3;

sellsig = Short1 && Short2 && Short3;

closebuy=sellsig;

closesell=buysig。

}

空白 CheckForOpen() {

if (last==Time[0]) return;

int res,ord;

double entry,stop;

ord=CalculateCurrentOrders();

如果(ord!=0) CheckForClose();

//---- 买入条件

如果(buys< buysig) {

res=OpenAtMarket(OP_BUY,Lots)。

如果(res<0) Print("错误打开BUY订单:",(GetLastError())。

否则last=Time[0]。

}

//---- 卖出条件

如果(sells< sellsig) {

res=OpenAtMarket(OP_SELL,Lots)。

如果(res<=0) Print("错误打开SELL订单:",(GetLastError())。

否则last=Time[0]。

}

}

int OpenAtMarket(int mode,double lot) {

int tr,col;

double openprice;

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

RefreshRates()。

如果(模式==OP_SELL) {

openprice=Bid;

col=Red;

} else {

//openprice=nd(Ask);

openprice=Ask;

col=Blue;

}

OrderSend(Symbol(),mode,lot,openprice,slipage,tp,EAName+Magic,Magic,0,col)。

}

返回。

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

//| 检查收盘条件|

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

空白 CheckForClose() {

int total;

//----

total=OrdersTotal()。

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

{

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

如果(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) 继续。

//---- 检查订单类型

如果(OrderType()==OP_BUY && closebuy) CloseAtMarket(OrderTicket(),OrderLots())。

如果(OrderType()==OP_SELL && closesell) CloseAtMarket(OrderTicket(),OrderLots())。

}

}

bool CloseAtMarket(int ticket,double lot) {

bool bres=false; int tr;

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

RefreshRates()。

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

if (!bres) Print("错误关闭订单:",(GetLastError())。

}

 
Julia:
谢谢你,米歇尔。

但如果代码是在指标代码中呢?

是这样吗。

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1]) ?????

是的,可能是这样;这取决于你的目的是什么......

 

请帮助--将这些转换为Mq4--谢谢

亲爱的各位。

我正在建立一个系统,我认为它非常好,我之前测试了3个月的想法,现在我正在尝试编码一个指标,这将是尽快在论坛上,所以我们可以测试它,它真的会赚大钱我想。

请帮助我把这些线条转换成mql4编码。

1- 我有一个空洞的X,这将有一个值,我现在正在计算它。

因此,我们有X作为一个整数

2- 该指标必须检查 当前的GMT时间,它必须是格林威治标准时间上午6:00--时间框架1 H

-- 检查GMT时间6:00am,当这个蜡烛关闭时,我们需要计算这个蜡烛的以下变量。

高 - 低 = A

A / 2 = B

B - 高 = C = SL

D = X * 30%

买入= D + C

买入目标= C + (X * 60%)

卖出= C - D

卖出_目标= C - (X * 60%)

然后。

我想把结果以线的形式显示在图表上,根据买入和卖出的入口和SL,买入的区域为灰色,卖出的区域为红色。

这些必须在格林尼治标准时间6:00的蜡烛结束后自动出现,时间框架为1H,所以计算必须根据格林尼治标准时间6:00至6:59am的蜡烛高点和低点。

请将此转换为MQL4,这样我就可以测试它,然后再回来发布结果。

非常感谢

 
Beno:
谢谢沃尔夫

这对我帮助很大,但也带来了一个新的问题, ,它现在可以买入,但没有卖出,也没有在正确的地方卖出。我一直在尝试买入所有三个di是蓝色的,卖出时都是红色的。

我想我为EA选择了正确的名字 "深渊",因为我正坐在那里试图用代码走出困境。大笑

贝诺,我对这个问题不确定。 我通常没有在EA中使用颜色变化指标的良好经验。 打开附有指标的数据窗口,找出每种颜色返回的数值。 这可能有助于你的编码,同时确保你在正确的时间调用正确的指标缓冲区。(我相信你已经做了)如果你把整个EA贴出来,可能会有更好的运气,如果你真的需要帮助。 另外,我个人会用两个独立的Ordersend()函数 来编码,一个专门用于空头,另一个专门用于多头。 这只是我的看法,它使事情更容易操作。

祝你好运,我们都有自己的 "深渊 "版本。

 

欢呼吧,沃尔夫

我打算尝试一下2个订单的选项,看看会发生什么。