如何编码? - 页 179

 
Roger09:
我在Alpari账户上试了几次,没有错误。只有一次,当我把脚本放在专家目录下并以EA身份启动时。

这是因为我问了你关于目录的问题。

对不起。

我想我找到了问题所在。我在window vista上,我通常使用 "以管理员身份运行",我试着不这样做,现在似乎工作正常了。

 

从MT4 .mq4向C++ DLL传递一个数组

有什么帮助吗?

我有一个问题,就是将一个包含8个指标值的数组传递给C++ DLL。这很简单,但我似乎在调用

ForexIndex()函数 时,我似乎得到了-1,该函数 实际上是调用了DLL中的导入函数gepModel ( d [] ) 。 ForexIndex函数应该从DLL中返回0或1。

我怀疑我在Forexindex()的.mq4文件中做错了什么。如果有任何帮助,我将非常感激。以下是简单的代码。C++ DLL文件是好的,它的编译没有错误,所以问题出在mq4文件上。

================================MQ4 file====================

#import "JadeClass.dll"

int gepModel( double& d[] ) 。

#import

int start()

{

........

........

........

ForexIndex()。

.......

......

......

.....

}

int ForexIndex()

{

int myindex;

double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol;

int counted_bars=IndicatorCounted()。

如果(counted_bars<0)返回(-1)。

如果(counted_bars>0) counted_bars--。

int pos=Bars-counted_bars;

MA_Close = iMA(NULL,PERIOD_M5,8,0,0,0);

MA_High = iMA(NULL,PERIOD_M5,8,0,0,0)。

MA_Low = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Open = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

Macd = iMACD(NULL,PERIOD_M5,12,26,9,0,0,0)。

Rsi = iRSI(NULL,PERIOD_M5,10,0,0);

Stoch = iStochastic(NULL,PERIOD_M5,14,3,3,0,0,0);

Vol = iVolume(NULL,PERIOD_M5,0);

while(pos>=0)

{

ind[0] = MA_Close;

ind[1] = MA_High;

ind[2] = MA_Low;

ind[3] = MA_Open;

ind[4] = Macd;

ind[5] = Rsi;

ind[6] = Stoch;

ind[7] = Vol;

myindex = gepModel(ind);

pos--;

}

打印( " Myindex = " , myindex)。

返回(myindex)。

}

=========================DLL 源代码 ===========================

#include "stdafx.h"

#include "JadeClass.h"

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

#define MT4_EXPFUNC __declspec(dllexport)

//唯一的CJadeClassApp对象

CJadeClassApp theApp;

MT4_EXPFUNC int __stdcall gepModel(double d[]);

MT4_EXPFUNC int __stdcall gepModel(double d[])

{

.....

.....

.....

.....

}

============================ DLL源代码的def文件 ===================

; JadeClass.def : 宣布DLL的模块参数。

LIBRARY "JadeClass"

输出

; 明确的导出可以在这里进行

gepModel

========================================

 

需要帮助添加 每个信号只有一个交易的代码

我正在学习MQ4代码,花了很多时间试图弄清楚如何为每个信号只做一笔交易编码。我已经尝试了一些方法,但不能让它只做一笔交易。举例来说,如果TP被击中,由于信号仍然良好,它将进行另一次同侧交易。我希望它能等到反向信号,然后再进行该交易。我在这里附上了没有任何改动的EA。谢谢你的帮助。 马蒂

附加的文件:
 
martypatty:
我刚刚开始学习mq4代码,花了很多时间想知道如何为每个信号只做一笔交易编码。我已经尝试了一些方法,但不能让它只做一笔交易。举例来说,如果TP被击中,由于信号仍然良好,它将进行另一次同侧交易。我希望它能等到反向信号,然后再进行该交易。我在这里附上了没有任何改动的EA。谢谢你的帮助。 马蒂

我最近在mql4.com上发现了如何做到这一点,因为我遇到了在一个柱子上有太多开仓交易的问题。在开始的时候,mql4的文章对我帮助很大,另外他们有一个代码数据库,可以给你提供很好的例子来工作。这个网站仍然有很好的帖子历史和一些非常好的编码者,只要使用搜索工具并点击显示为帖子的按钮,就可以节省你翻阅一页又一页的主题来寻找你需要的答复。至于你的问题,请使用这个代码。

int BarsCount=0;

if(Bars<BarsCount)

{

//Code to do once goes here

BarsCount=Bars;

}

[/CODE]

Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.

[CODE]for(i=0;i<=STD_MA_Period+1;i++)

{

STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);

}

Print(STD_MA_Buffer[1]);

PS double STD_MA_Buffer[]; 被定义在全局变量部分。

 

修复我的EA,请

我有一些想法,但我可以把它写成mql4代码,你能帮助我吗?

这是我的问题

这是我的系统定义。

A. if orders=0 >> OP buy && OP sell

B. 通过+或-条件制作网格

例如:如果OPbuy + grid = OPbuy

如果OPbuy - grid = OPsell

对OPsell也一样

C. 如果利润>0 &&利润>最低利润 ( 利润锁定 )

停止任何订单(OP买入||OP卖出),并移动尾随资产或利润点。

D. 按利润平仓,可以按股本或按点平仓

E. .mq4格式,因为我想知道我的错误在哪里。

我在B点有问题,请帮助我。

 
mazgen:
我有一些想法,但我可以把它写成mql4代码,你能帮助我吗?

这是我的问题

这是我的系统定义。

A. if orders=0 >> OP buy && OP sell

B. 通过+或-条件制作网格

例如:如果OPbuy + grid = OPbuy

如果OPbuy - grid = OPsell

对OPsell也一样

C. 如果利润>0 &&利润>最低利润 ( 利润锁定 )

停止任何订单(OP买入||OP卖出),并移动尾随资产或利润点。

D. 按利润平仓,可以按股本或按点平仓

E. .mq4格式,因为我想知道我的错误在哪里。

我在B点有问题。请帮助我

发送源代码而不是ex4怎么样?

 
figurelli:
发出源代码而不是ex4呢?

请告诉我如何编码。

这是我的最后一个细节声明

修复这个.rar

我希望它能解决我的EA,在OP上循环销售的问题,为什么?

 

趋势线 问题

我是编码新手,只是为了练习而做事,我想把趋势线停在当前条形图上。我想出的办法是简单地把它在当前条形上的颜色改为背景色。实质上,只是将该线过了柱状体后融合到背景中,使其在该点消失。

所以我现在问专家,正确的方法是什么。我知道有很多方法可以完成同样的事情,所以我只是想看看我可以做什么的其他想法,以努力学习更多。

谢谢

 

非常奇怪的MQL代码行为

大家好。

Metatrader版本。4.00 Build 224 (15 May 2009)

Metaeditor版本。4.00 Build 224 (2009年5月14日)

我在MQL中遇到了一个非常奇怪的bug,让我完全摸不着头脑,以至于我正在回顾我所有的旧代码,以确保它的编写是为了避免这个问题。

我希望有人能告诉我这到底是怎么回事。

这里是代码,一个简单的指标,基本上什么都不做。然而,在init()部分,当图表周期为H1时,我放置了一个对2个函数的调用。

这两个函数在所有方面都是相同的,除了一个方面。一个定义了一个静态的int数组,另一个定义了一个非静态的int数组。这两个函数所做的就是打印出其本地定义的数组的大小,为数组元素分配一些值,然后打印出来。

#property indicator_chart_window

void afunc() {

int i;

int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc array[4] size="+ArraySize(array));

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

Print("afunc array["+i+"]="+array);

}

}

void afunc_static() {

int i;

static int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc_static array[4] size="+ArraySize(array));

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

Print("afunc_static array["+i+"]="+array);

}

}

int init() {

if (Period() == PERIOD_H1) {

afunc();

afunc_static();

}

return(0);

}

int deinit() {

return(0);

}

int start() {

return(0);

}

如果你看一下代码,不应该有任何情况下,这两个函数的行为是不同的。

然而,如果我将该指标附加到M5图表上,然后切换到H1时间框架,我得到以下输出。

2009.05.23 18:12:47 afunc EURUSD,H1: initialized

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[3]=103

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[2]=102

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[1]=101

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[0]=100

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[4] size=4

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[3]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[2]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[1]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[0]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[4] size=0

2009.05.23 18:12:47 afunc EURUSD,M5: uninit reason 3

2009.05.23 18:12:47 afunc EURUSD,M5: deinitialized

2009.05.23 18:12:45 afunc EURUSD,M5:初始化了

2009.05.23 18:12:43 afunc EURUSD,M5:加载成功

请注意,尽管我在afunc()中定义了'int array[4]',但该数组的大小实际上是零,我不能给数组的元素赋值。这个函数显然不能像预期的那样工作。

注意,我在afunc_static()中定义了'static int array[4]',大小正确显示为4,我给数组元素分配的值也是如此。这个函数工作正常。

一句话。如果你在一个函数中定义了一个非静态数组,并且该函数没有被你的指标调用,那么你可能会有一个问题。

如果你后来切换了图表的时间框架,然后调用该函数,那么该函数中任何本地定义的数组的大小都将为零,与你定义的数组的大小无关。

据我所知,解决这个问题的唯一方法是确保在你的函数中任何本地定义的数组都被定义为静态数组。我知道这很荒唐,但我看不出有什么其他方法可以避免这个问题。

我真的很感谢关于这个问题的任何反馈。

请注意。

劳伦斯。

附加的文件:
afunc.mq4  1 kb
 
原因: