[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 412

 

大家好!在编写摇摆不定的专家时,正在寻找更准确的出场点,遇到了RSI(8)和ADX(25)之间的交叉点。目测在演示版上手动交易时一切正常。

问题:如何写出RSI(8)与ADX(25)DI+的交叉条件,例如,如果RSI(8)有一个从0到100的边界,而ADX(25)没有边界。也就是说,如果你把ADX扔在没有边界的图表上,然后把RSI扔在上面,那么RSI的刻度是最大和最小ADX。

是否可以定义RSI的值,当它被ADX缩放时。

 
PapaYozh:

没有
????...如果你不介意的话,请给一个更详细的答案...如果你能至少给出一些简单的脚本作为例子就更好了,这将使你清楚地了解WindowHandle函数的作用。
 
drimara: 也就是说,如果你在没有指定边界的情况下在图表上抛出ADX,然后再抛出RSI,那么RSI就会以最大和最小的ADX为尺度。如果ADX被指定了0到100的边界,那么ADX和RSI之间就会有很少的明显交叉。

是否可以定义RSI的值,当它被ADX缩放时。

如果你再把它向左和向右移动,交叉点就会开始偏移。
 
通过iCustom连接时,非标准指标中的参数数量是否有限制?

我有一个大约有8个参数的指标,我正确地输入了所有的参数,我检查了好几次,但在编译时仍然出现错误')'。- 错误的参数计数 D:\InstaTrader\experts\2.mq4 (11, 280)
 
sss2019:
通过iCustom连接时,非标准指标中的参数数量是否有限制?

我有一个大约有8个参数的指标,我正确地输入了所有的参数,我检查了好几次,但在编译时仍然出现错误')'。- 错误的参数计数 D:\InstaTrader\experts\Expert_2.mq4 (11, 280)
在指标中显示代码+输入参数
 
7777877:
????......如果你不介意,请给一个更详细的答案......如果你能至少给出一些简单的脚本作为例子就更好了,这将有助于理解WindowHandle函数的作用。


以你目前的知识水平,你不太需要它。

如果你有成为一名程序员的愿望,那么就在谷歌 的帮助下咀嚼科学吧。查询"窗口描述符 site:mql4.com"

 
我想请编程大师们告诉我我的问题,做这个顾问到底是否现实?
 
stater:
我请编程大师告诉我我的问题,让这个顾问成为现实吗?

只要你愿意,一切皆有可能。

看到以下内容。

1) 栅栏开口控制

2)订单发送

试了又试,大师们会纠正的

 

这里有一个EA,使订单在蜡烛的收盘时打开,而不仅仅是一个十字星。

谁能帮帮我,提前谢谢你。

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

//| RSI_MA.mq4|

//| Copyright © 2008, AEliseev k800elik@gmail.com !

//| http://www.metaquotes.net |

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

#property copyright"Copyright © 2008, Andrey E. k800elik@gmail.com"

#属性链接 "http://www.metaquotes.net"


//---- 输入参数

外部 CCI_Per=14。

外部的MA_Per=20。

外部CCI_close_Per=14。

外部双倍TakeProfit=500。

外置双倍止损=150。

外来的双倍Lots=0.01。

外部的inttern Deposit=1000。

外部 bool MM=false。

外部inttern _MagicNumber=131313。

外部的int_Sleep=5000。


int LotA=1, Err=0;

int j=0; var2,var1;

int counter=0。

int票。

bool var3;


bool order=false。


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

//|专家初始化功能 |

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

int init()

{

Comment("CCI_MA v1.5 © 2008, Andrey E. k800elik@gmail.com")。

return(0);

}

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

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

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

int deinit()

{

/* int i, a1, a2;

//----

如果(OrdersTotal()>0)

{

for (i=0; i==OrdersTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS)。

如果(OrderMagicNumber()==131313)

{

a1=OrderClose(LotA*Lots,Ask,5,Red);

/a2=OrderClose(var1,LotA*Lots,Ask,5,Red);

}

}

}*/

return(0);

}

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

//|专家启动功能|

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

int start()

{

//----

如果(isNewBar())EveryBar()。

EveryTick()。

//----

return(0);

}

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


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

//| 检查是否有新条

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

bool isNewBar()

{ static datetime TimeBar=0;

bool flag=false。

如果(TimeBar!=Time[0])

{

TimeBar=Time[0];

flag=true。

}

return(flag)。

}

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

//|当新条形图出现时执行动作。

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

空白的EveryBar()

{

// Print("A NEW BAR has arrived!" )

双重MA[100], CCI[100], CCIclose[100], StandDevi[100];

int i,limit=ArraySize(CCI)。

双SL,TP。

睡眠(_Sleep)。

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits)。

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

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i)。

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i)。

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i)。

}

// 检查是否有足够的钱来开立新的订单

如果(AccountFreeMargin()<(1000*Lots))

{

Print("我们没有钱。Free Margin = ", AccountFreeMargin())。

return(0);

}

//=================================================================================

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

//----,浏览所有开放的职位

for ( int z = _OrdersTotal - 1; z >= 0; z -- )

{

//----,如果在选择位置时发生错误,则继续选择下一个位置。

if ( !OrderSelect( z, SELECT_BY_POS ))

{

_GetLastError = GetLastError()。

Print("OrderSelect( ",z," , SELECT_BY_POS ) - Error #", _GetLastError);

继续。

}

// 如果一个位置不是为当前符号打开的,它将被跳过

如果 ( OrderSymbol() != Symbol() ) 继续。

// 如果MagicNumber不等于_MagicNumber,跳过

//这个位置

如果 ( OrderMagicNumber() != _MagicNumber ) 继续。

//----,如果有一个BAY的位置是开放的。

如果 ( OrderType() == OP_BUY )

{

//----,如果CCI向下越过190线

如果(((CCIclose[2]>190)&&(CCIclose[1]<=100)) ||(CCI[1]<MA[limit-MA_Per-1]) &&(CCI[2]>=MA[limit-MA_Per-2])

{

//---- 关闭位置

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 10, Green )

{

_GetLastError = GetLastError()。

Print("OrderClose error # , _GetLastError )。

Err=1。

返回(-1)。

}

}

// 如果信号没有变化,退出--现在打开还为时过早。

//新的位置

否则

{ 返回(0); }

}

//----,如果卖出头寸被打开。

如果 ( OrderType() == OP_SELL )

{

//----,如果CCI向上越过线-190。

如果((CCIclose[2]<-190)&&(CCIclose[1]>=-300)) ||((CCI[1]>MA[limit-MA_Per-1]) &&(CCI[2]<=MA[limit-MA_Per-2])

{

//---- 关闭位置

if(!OrderClose( OrderTicket(), OrderLots(), Ask, 10, Red )

{

_GetLastError = GetLastError()。

Print("OrderClose error # " , _GetLastError );

Err=2。

返回(-1)。

}

}

// 如果信号没有变化,退出--现在打开还为时过早。

// 新的位置

否则返回(0)。

}

}

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

//|如果执行到了这一步,则没有任何仓位。

//|检查是否可以开仓。

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

睡眠(_Sleep)。

//----,如果CCI从下往上越过了MACD。

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);

TP = NormalizeDouble(Bid + TakeProfit*Point, Digits)。

如果((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<MA[limit-MA_Per-2))

{

//---- 打开BAY位置

如果(OrderSend( Symbol(, OP_BUY, LotA*Lots, Ask, 5, SL, TP, "CCI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError()。

Print( "OrderSend OP_BUY error #" , _GetLastError )。

Err=3。

返回(-1)。

}

return(0);

}

//----,如果CCI从上到下越过MACD。

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);

如果((CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>MA[limit-MA_Per-2] )

{

//----,建立一个卖出头寸

如果(OrderSend( Symbol(, OP_SELL, LotA*Lots, Bid, 5, SL, TP, "CCI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError()。

Print("OrderSend OP_SELL错误#", _GetLastError )。

Err=4。

返回(-1)。

}

return(0);

}

}

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

//|在每次价格变化时进行计算。

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

空白的 EveryTick()

{

int i;

如果(MM==true)

{

如果(AccountBalance()>(2*Deposit))LotA=2。

如果(AccountBalance()>(3*Deposit))LotA=3。

如果(AccountBalance()>(4*Deposit))LotA=4。

如果(AccountBalance()>(5*Deposit))LotA=5。

如果(AccountBalance()>(6*Deposit))LotA=6; if (AccountBalance()>(6*Deposit); LotA=6;

如果(AccountBalance()>(7*Deposit))LotA=7。

如果(AccountBalance()>(8*Deposit))LotA=8。

如果(AccountBalance()>(9*Deposit))LotA=9。

如果(AccountBalance()>(10*Deposit))LotA=10。

如果(AccountBalance()>(11*Deposit))LotA=11。

如果(AccountBalance()>(12*Deposit))LotA=12。

如果(AccountBalance()>(13*Deposit))LotA=13。

如果(AccountBalance()>(14*Deposit))LotA=14。

如果(AccountBalance()>(15*Deposit))LotA=15。

如果(AccountBalance()>(16*Deposit))LotA=16。

如果(AccountBalance()>(17*Deposit))LotA=17。

如果(AccountBalance()>(18*Deposit))LotA=18。

如果(AccountBalance()>(19*Deposit))LotA=19。

如果(AccountBalance()>(20*Deposit))LotA=20。

}

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

int z;

双SL,TP。

双重MA[100], CCI[100], CCIclose[100], StandDevi[100];

int limit=ArraySize(CCI)。

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

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i)。

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i)。

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i)。

}

switch(Err)

{

案例1:

for ( z=_OrdersTotal - 1; z >= 0; z - )

{

if ( !OrderSelect( z, SELECT_BY_POS ))

{

_GetLastError = GetLastError()。

Print("OrderSelect( ",z," , SELECT_BY_POS ) - Error #", _GetLastError);

继续。

}

如果 ( OrderSymbol() != Symbol() ) 继续。

如果 ( OrderMagicNumber() != _MagicNumber ) 继续。

如果 ( OrderType() == OP_BUY )

{

如果((CCIclose[2]>300) && (CCIclose[1]<=300) || (CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>=MA[limit-MA_Per-2])

{

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green )

{

_GetLastError = GetLastError()。

Print("CASE OrderClose error # , _GetLastError )。

Err=1。

返回(-1)。

}

否则Err=0。

}

}

}

突破。

//=============================================================================

案例2:

for ( z=_OrdersTotal - 1; z >= 0; z - )

{

if ( !OrderSelect( z, SELECT_BY_POS ))

{

_GetLastError = GetLastError()。

Print("OrderSelect( ",z," , SELECT_BY_POS ) - Error #", _GetLastError);

继续。

}

如果 ( OrderSymbol() != Symbol() ) 继续。

如果 ( OrderMagicNumber() != _MagicNumber ) 继续。

如果 ( OrderType() == OP_SELL )

{

如果((CCIclose[2]<-300) && (CCIclose[1]>=-300) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<=MA[limit-MA_Per-2])

{

if(!OrderClose( OrderTicket(), OrderLots(), Ask, 5, Red )

{

_GetLastError = GetLastError()。

Print("CASE OrderClose error # " , _GetLastError );

Err=2。

返回(-1)。

}

否则Err=0。

}

}

}

突破。

//==============================================================================

案例3:

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);

TP = NormalizeDouble(Bid + TakeProfit*Point, Digits)。

如果(OrderSend( Symbol(, OP_BUY, LotA*Lots, Ask, 7, SL, TP, "AI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError()。

Print( "CASE OrderSend OP_BUY error # " , _GetLastError )。

Err=3。

返回(-1)。

}

否则Err=0。

突破。

//===================================================================================

案例4:

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);

如果(OrderSend( Symbol(, OP_SELL, LotA*Lots, Bid, 7, SL, TP, "AI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError()。

Print("CASE OrderSend OP_SELL错误#", _GetLastError )。

Err=4。

返回(-1)。

}

否则Err=0。

突破。

}

}

 
Neo777:

这里有一个EA,使订单在蜡烛的收盘时打开,而不仅仅是一个十字星。

我想知道如何打开订单。


那你打算如何知道酒吧将以这个刻度收盘?也许是通过新酒吧 的开业?

编码是通过按钮SRC插入的