如何编码? - 页 321

 
mladen:
dasio

试试这样的方法。

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 OrangeRed

#property indicator_color2 Silver

#property indicator_width1 2

extern int RsiPeriod = 50;

extern int RsiPrice = PRICE_CLOSE;

double work[];

double avg[];

//------------------------------------------------------------------

//

//------------------------------------------------------------------

//

//

//

//

//

int init()

{

SetIndexBuffer(0,work);

SetIndexBuffer(1,avg);

return(0);

}

int start()

{

int i,countedBars = IndicatorCounted();

if (countedBars<0) return(-1);

if (countedBars>0) countedBars--;

int limit = MathMin(Bars-countedBars,Bars-1);

for(i=limit; i>=0; i--)

{

work = iRSI(NULL,0,RsiPeriod,RsiPrice,i);

int y = iBarShift(NULL,PERIOD_D1,Time);

int x = iBarShift(NULL,PERIOD_D1,Time);

if (x!=y)

{

int k = iBarShift(NULL,0,iTime(NULL,PERIOD_D1,y));

double average = work[k];

int c = 1;

for (int j=k-1; j>=i; j--,c++) average += work[j]; average /= c;

for ( j=k ; j>=i; j--) avg[j] = average;

}

}

return(0);

}

Mladen 我试过了,但没有成功。

附上一个我的指标的例子。唯一不同的是计算方式,但其他方面是一样的。

你能把你的公式整合一下吗? 这样我也可以研究一下。

谢谢你

test1.mq4

附加的文件:
test1.mq4  3 kb
 

大家好。希望得到快速帮助,为一个信号写一行代码。

我正在使用Step_Indy和一个EMA交叉信号。我想做的是,只有当这两个信号都在10个柱子内发出时,EA才会进入交易。

所以说,如果Step给出了信号,我希望EA回过头来看10个柱子,看看是否有MA交叉,如果有,就进入。(注意,我不希望它只是检查 并查看当前的MA交叉信号是否为长线,我希望它是最近的,比如在10个柱子内)。

谢谢你的帮助,我想我在过去看过的任何EA中都没有这样做。

 

晓晓

从代码中我看不出该代码的意图是什么。总之,这里有一段代码,你可以选择是否使用真实范围作为指标的 "基本 "值(这是你代码的第一部分),或者你希望使用你代码的第二部分作为 "基本 "值。

dasio:
Mladen 我试过,但没有成功。

附上我的指标的一个例子。唯一不同的是计算方式,但其他方面是一样的。

你能把你的公式整合起来吗?这样我也可以研究一下。

谢谢你

test1.mq4
附加的文件:
_test1.mq4  2 kb
 

信号问题

Mladen,再次感谢你,警报不再重复,工作正常.....,但我想放一个止损点.....,我写了以下代码,买入和卖出信号有效,但买入止损和卖出止损不工作,见以下代码。

//-----Assigning Alarts----

如果(Period()==240){

static datetime lastAlerted=0。

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0) 。

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// 交易警报

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert("Buy","\n","Current time is",TimeToStr(CurTime()),"\n",Symbol()。

}

if((adx_h4>=20)&&(di_m_h4>=20)&&(di_m_h4>di_p_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert("Sell","\n", "当前时间是",TimeToStr(CurTime()),"\n",Symbol()。

}

// 停止警报

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)|(adx_h4>=20)&&(di_p_h4>di_m_h4)=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert("Stop Buy","/n", "当前时间是",TimeToStr(CurTime()),"/n",Symbol())。

}

如果((adx_h4>=20)&&(di_m_h4>=20)&&(di_p_h4ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert(" Stop Sell","/n", "当前时间是",TimeToStr(CurTime()),"/n",Symbol()。

}

mladen:
像这样试试:
if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 
mladen:
dasio 从代码中我看不出代码的意图是什么。总之,这里有一段代码,你可以选择是否使用真实范围作为指标的 "基本 "值(这是你代码的第一部分),或者你希望使用你代码的第二部分作为 "基本 "值

谢谢你,mladen。

我知道以这种方式计算是没有意义的。但我正在努力编写我每天都要做的分析报告。^^

这只是工作的1/3。

谢谢你

 
mladen:
dasio 从代码中我看不出该代码的意图是什么。总之,这里有一段代码,你可以选择是否使用真实范围作为指标的 "基本 "值(这是你代码的第一部分),或者你希望使用你代码的第二部分作为 "基本 "值

谢谢你,这很完美。

是否可以增加星期五的修复?

谢谢。

谢谢

 

成交量

I want to query the volume of each bar but I don't have a clue how to go about it I am new tomql4 programming but trying to learn I have tried this simple program but it may be complete rubbish, please let me know, and any suggestions would be appreiciated. Below is the start of the script to query the volume of a bar then print the result, please let me know where I am going wrong!!!! keep trying to compile there is one error which says (end of program ending Bracket } expected.

//---输入参数

extern double TakeProfit = 4;

extern double StopLoss = 20;

外部双数 Lots = 0.1;

extern double TrailingStop = 30;

外置双数volumemore = 600。

外置双倍量 = 150。

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

//| 专家初始化函数 |

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

int start()

{

如果(Volume=>volumemore)

{

打印("volume more")。

{

如果(Volume=<volumeless)

{

Print ("volume less");

如果(Bars<20)

{

Print("条数少于20")。

{

//----

//----

返回(0)。

}

 

使用Volume,其中 "index "是你想看的条形图的数字。请记住,在metatrader 4中,"成交量 "总是tick volume

Tim Latham:
I want to query the volume of each bar but I don't have a clue how to go about it I am new to mql4 programming but trying to learn I have tried this simple program but it may be complete rubbish, please let me know, and any suggestions would be appreiciated. below is the start of the script to query the volume of a bar then print the result, please let me know where I am going wrong!!!! keep trying to compile there is one error which says (end of program ending bracket } expected.

//---输入参数

External double TakeProfit = 4;

extern double StopLoss = 20;

外部双数 Lots = 0.1;

extern double TrailingStop = 30;

外置双数volumemore = 600。

外置双倍量 = 150。

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

//| 专家初始化函数 |

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

int start()

{

如果(Volume=>volumemore)

{

打印("volume more")。

{

如果(Volume=<volumeless)

{

Print ("volume less");

如果(Bars<20)

{

Print("条数少于20")。

{

//----

//----

return (0);

}
 
jayjonbeach:
大家好。 希望得到快速帮助,为一个信号写一行代码。

我正在使用Step_Indy和一个EMA交叉点作为信号。 我想做的是,只有当两个信号都在10个柱子内发出时,EA才会进入交易。

所以说,如果Step给出了一个信号,我想让EA回看10个柱子,看看是否有一个MA交叉,如果有的话,就进入交易。 (注意,我不希望它只是检查并查看当前的MA交叉信号是否为长线,我希望它是最近的,比如在10个柱子内)。

如果有任何帮助,我想我在过去看过的任何EA中都没有见过这样做。

我尝试了一些方法,但到目前为止,没有任何方法奏效。

以下是我尝试的方法之一。

Extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance, Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest ) 。

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Practice,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1)。

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

如果(TwentyOneEMA > FiftyFiveEMA)

{

如果(trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

如果(trendCurr<0)

返回(LONG)。

否则返回(NONE)。

}

}

}

如果(TwentyOneEMA < FiftyFiveEMA)

{

如果(trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

如果(trendCurr>0)

返回(SHORT)。

否则返回(NONE)。

}

}

}

return(NONE);

}

任何想法都值得赞赏,我也试过(int i=1; i<=lookback; i++)

 

...

jayjonbeach,

你在循环中一次又一次地测试trendCurr的值,而没有改变它(所以它总是返回NONE)。

试着把iCustom()放到循环中,然后测试这个值。就像这样。

if (trendCurr>0)

{

for(int i=1; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

return(NONE);

}

jayjonbeach:
好吧,我尝试了一些东西,但到目前为止,没有任何东西是有效的。

下面是我尝试的方法之一。

extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance, Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest)。

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance, Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

如果(TwentyOneEMA > FiftyFiveEMA)

{

如果(trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

如果(trendCurr<0)

返回(LONG)。

否则返回(NONE)。

}

}

}

如果(TwentyOneEMA < FiftyFiveEMA)

{

如果(trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

如果(trendCurr>0)

返回(SHORT)。

否则返回(NONE)。

}

}

}

return(NONE);

}

感谢任何想法