如何编码? - 页 271 1...264265266267268269270271272273274275276277278...347 新评论 forextrader666 2011.09.18 13:13 #2701 需要帮助这个EA的iCustom函数可以调用一个自定义指标。 嗨,大家好。 我想在这个(swb grid 4.1.0.3_EA)EA中添加这个(Entry.mq4)指标,并使用 iCustom函数,这样我和我们可以在EA的策略中使用这个指标。 该EA已经使用了3个MT4指标布林线、随机指数和RSI,并且有开关,所以你可以选择其中一个或多个指标。 开关,所以你可以通过选择 "真 "或 "假 "来选择使用它们中的一个或全部。 我想在EA中添加第四个指标(Entry.mq4)。 如果有人能帮助我,我将非常感激。 谢谢你。 下面是EA和indi的附件。 附加的文件: entry.mq4 4 kb swb_grid_4.1.0.3_ea.mq4 14 kb Agent86 2011.09.19 11:34 #2702 需要MQL4的帮助来理解这个数组 嗨,编码员 有谁能给我讲讲关于数组的知识吗? 或者说,我在理解这个循环时遇到了更多的麻烦,因为它与这个数组有关。 int i=Bars;#property copyright "Unfinished POS by Agent86"double v1[]; double v2[]; double val1; double val2; int start() { while(i>=0) { val1=iFractals(NULL, 0, MODE_UPPER,i)。 如果(val1 > 0) { v1=高。 } 否则 { v1=v1; } val2=iFractals(NULL, 0, MODE_LOWER,i)。 如果(val2 > 0) { v2=Low。 } 否则v2=v2。 i--; } return(0); } 这是一个基本的分形,但我似乎无法引用数组中的任何元素。 我希望能够以某种方式增加i++,并打印(v1); 或打印0或EMPTY_VALUE 之前的值。 如果我这样做的方向是正确的。 我遇到了麻烦。 Print (v1): 总是==0并打印出0 我有点明白了,因为它实际上是循环到了-1,==0 我怎样才能把Print语句放在哪里,以便我能够看到发生了什么? 我已经尝试了很多方法,并且重新初始化了i=0来尝试交替循环,这样我就可以引用v1元素,但是所有的尝试都失败了。 基本上,我想查看之前的分形,或将它们标记为A高、B低等,以便将来可能用于ABCD方案类型的EA。 目前,我主要是想打印v1,以便我可以看到它在做什么。 也许我可以设计一些东西来选择上一个分形,如A_high和/或B_low或一些类似的方案。 我是否走错了方向? 请指教 谢谢 Trader5050-Deployed 2011.09.19 15:24 #2703 我想用一个FOR循环来代替。因为你知道确切的条数,所以更容易使用,加上i永远不会<0,这有助于避免混淆。 For (int i=Bars-1;i>0;i--) { //代码 } 试着将所有的数组值设置为0,然后再去分配指标值。另外,在分配完指标值后直接尝试print()。看看它是否真的返回任何东西。 我想,你最好的办法是给数组指定一个大小。比如,1000个位置。你不太可能需要这么多,而且这将减少你的计算量。你所需要做的就是循环查看最后999个条形图,然后赋值。我记得MT4在数组初始化和其他方面有问题。 Agent86 2011.09.19 16:24 #2704 阵列问题 Trader5050-Deployed: 我想用FOR循环来代替。如果你忘了包括i------,while循环会导致锁定。因为你知道确切的条数,所以更容易使用,再加上i永远不会<0,这有助于避免混淆。对于(int i=Bars-1;i>0;i--){ //代码 } 试着将所有的数组值设置为0,然后再去分配指标值。另外,在分配完指标值后直接尝试print()。看看它是否真的返回任何东西。 我想,你最好的办法是给数组指定一个大小。比如,1000个位置。你不太可能需要这么多,而且这将减少你的计算量。你所需要做的就是循环查看最后999个条形图,然后赋值。我记得MT4在数组初始化和其他方面有问题。 好的,谢谢,我会试试的。 虽然while语句运行良好,但它不能帮助我获得我想打印/查看的数组元素 等。 我会按照你说的去做,做一些测试,然后再发回来。 谢谢 Agent86 2011.09.20 00:57 #2705 Trader5050-Deployed: 我想用一个FOR循环来代替。如果你忘了包括i------,while循环会导致锁定。因为你知道确切的条数,所以更容易使用,而且i永远不会<0,这有助于避免混淆。对于(int i=Bars-1;i>0;i--) { //代码 } 试着将所有的数组值设置为0,然后再去分配指标值。另外,在分配完指标值后直接尝试print()。看看它是否真的返回了什么。 我想,你最好的办法是给数组指定一个大小。比如,1000个位置。你不太可能需要这么多,而且这将减少你的计算量。你所需要做的就是循环查看最后999个条形图,然后赋值。我记得MT4在数组初始化和其他方面有问题。 仍然只是打印所有0的条目的数组。 很奇怪 Mladen Rakic 2011.09.20 06:38 #2706 Argent86, 你的代码中有几个错误。 - 你使用的数组还不是数组(如果你没有指定数组大小,就像你在代码中做的那样,那么它就是一个动态数组,数组大小必须在运行时管理),所以你的数组大小为0(这就是总是为0的第一个原因--这是metatrader错误处理程序防止致命错误,并在这种情况下返回0--在C/C++会导致崩溃) - 如果你没有指定数组是 "串联式 "的(在 "串联式 "中第0个元素是最后一个,而在普通数组中第0个元素是第一个),那么在这种情况下表达式i+1是数组的下一个元素而不是上一个。你可以以 "类似系列 "的方式使用数组,但你必须做更多的事情,以使它在运行时工作,即使这样,当条形数字改变时,你也会得到爬行代码,所以最好在其原始模式下使用数组--"类似C "模式 - 还要确保你至少从新刻度线上的第3个条形开始(新的分形 会在这里出现,而不是在当前条形上)。 以下是您在没有这些问题的情况下所做的尝试 #property indicator_chart_window double v1[]; double v2[]; int start() { int i,a,limit,counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit = MathMin(Bars-counted_bars,Bars-1); if (ArraySize(v1)!=Bars) ArrayResize(v1,Bars); if (ArraySize(v2)!=Bars) ArrayResize(v2,Bars); // // // // // for (i=limit, a=Bars-i-1; i>=0; i--,a++) { v1[a]=v1[a-1]; if (iFractals(NULL,0,MODE_UPPER,i) > 0) v1[a]=High; v2[a]=v2[a-1]; if (iFractals(NULL,0,MODE_LOWER,i) > 0) v2[a]=Low; } Comment("current upper frctal : "+DoubleToStr(v1,Digits)+"\n"+ "current lower frctal : "+DoubleToStr(v2,Digits)); return(0); } How to code? 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. [存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. M_j 2011.09.21 20:51 #2707 从MQ4访问一个带有:变量参数表的dll函数 你好。 有谁知道这是否可行:导入一个dll函数,该函数使用的参数是:可变参数列表。 例如:vprintf - C++参考资料 int vprintf ( const char * format, va_list arg ) 。 如果是这样,该怎么做? 谢谢 MJ [删除] 2011.09.26 14:56 #2708 如何调用没有返回值的函数 大家好。 在我的程序中,我想调用一个函数。 但是该函数没有返回值(void)。那么我如何调用这个函数呢? 以便在我调用函数的地方准确地执行函数中的代码。 就像它本身写在那个地方一样? 我在下面做了一些示例代码......在那里我检查了一些参数,如果OK,我想执行这个函数......。 希望有人能帮我解决这个问题,谢谢你,Jonkie76 //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int start() { //---- if (Price >= PRICE_CLOSE) call function ; // 这时我想调用函数.怎么做? 否则 Alert("Do nothing"); // //---- return(0); } //+------------------------------------------------------------------+ //===================================================================+ //FUNCTIONS //===================================================================+ //----------------------- 关闭订单功能 ----------------------+ 空白subCloseOrder() { int i, total = 0, ticket = 0。 err = 0。 c = 0; total = OrdersTotal(); for(i=total-1;i>=0;i--) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。 如果(OrderSymbol()==Symbol() &&) OrderMagicNumber()==Magic) { switch(OrderType()) { case OP_BUY : for(c=0;c<NumberOfTries;c++) { ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet) 。 err=GetLastError()。 如果(err==0) { if(ticket>0) break; } 否则 { 如果(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //忙乱错误 { Sleep(5000); 继续。 } 否则 //正常错误 { if(ticket>0) break; } } } break; } } } } How to code? MQL4 Learning EA Help Needed - Kale 2011.09.26 19:55 #2709 这很简单。你只需要调用它,因为它将返回一些东西,只是你不需要保存任何结果,因为无效类型根本就没有结果。(不返回任何东西)像这样。 int start() { //---- if (Price >= PRICE_CLOSE) subCloseOrder(); // At this point I'd like to call the function.How do I do that? else Alert("Do nothing"); // //---- return(0); } How to code? Make function wait until [ARCHIVE] Any rookie question, Mladen Rakic 2011.09.27 06:12 #2710 用 "void "代替。像这样: void someFunction(someParameters) { ... // // // no need to place return at the end, but if you want then use "just" return, like this // // return; } Void意味着它不会从一个函数 中返回值,这样它就有效地成为一个过程,而不是一个函数。 Jonkie76: 伙计们,姑娘们,你们好。在我的程序中的某个时刻,我想调用一个函数。 但是这个函数没有返回值(void)。那么我如何调用这个函数呢? 以便在我调用它的地方准确地执行函数中的代码。 就像它本身写在那个地方一样? 我在下面做了一些示例代码......在那里我检查了一些参数,如果OK,我想执行这个函数......。 希望有人能帮我解决这个问题,谢谢你,Jonkie76 //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int start() { //---- if (Price >= PRICE_CLOSE) call function ; // 这时我想调用函数.怎么做? 否则 Alert("Do nothing"); // //---- return(0); } //+------------------------------------------------------------------+ //===================================================================+ //FUNCTIONS //===================================================================+ //----------------------- 关闭订单功能 ----------------------+ 空白subCloseOrder() { int i, total = 0, ticket = 0。 err = 0。 c = 0; total = OrdersTotal(); for(i=total-1;i>=0;i--) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。 如果(OrderSymbol()==Symbol() &&) OrderMagicNumber()==Magic) { switch(OrderType()) { case OP_BUY : for(c=0;c<NumberOfTries;c++) { ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet) 。 err=GetLastError()。 如果(err==0) { if(ticket>0) break; } 否则 { 如果(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //忙乱错误 { Sleep(5000); 继续。 } 否则 //正常错误 { if(ticket>0) break; } } } break; } } } } 1...264265266267268269270271272273274275276277278...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
需要帮助这个EA的iCustom函数可以调用一个自定义指标。
嗨,大家好。
我想在这个(swb grid 4.1.0.3_EA)EA中添加这个(Entry.mq4)指标,并使用
iCustom函数,这样我和我们可以在EA的策略中使用这个指标。
该EA已经使用了3个MT4指标布林线、随机指数和RSI,并且有开关,所以你可以选择其中一个或多个指标。
开关,所以你可以通过选择 "真 "或 "假 "来选择使用它们中的一个或全部。
我想在EA中添加第四个指标(Entry.mq4)。
如果有人能帮助我,我将非常感激。
谢谢你。
下面是EA和indi的附件。
需要MQL4的帮助来理解这个数组
嗨,编码员
有谁能给我讲讲关于数组的知识吗?
或者说,我在理解这个循环时遇到了更多的麻烦,因为它与这个数组有关。
#property copyright "Unfinished POS by Agent86"
double v1[];
double v2[];
double val1;
double val2;
int start()
{
while(i>=0)
{
val1=iFractals(NULL, 0, MODE_UPPER,i)。
如果(val1 > 0)
{
v1=高。
}
否则
{
v1=v1;
}
val2=iFractals(NULL, 0, MODE_LOWER,i)。
如果(val2 > 0)
{
v2=Low。
}
否则v2=v2。
i--;
}
return(0);
}
这是一个基本的分形,但我似乎无法引用数组中的任何元素。
我希望能够以某种方式增加i++,并打印(v1); 或打印0或EMPTY_VALUE 之前的值。
如果我这样做的方向是正确的。
我遇到了麻烦。
Print (v1): 总是==0并打印出0
我有点明白了,因为它实际上是循环到了-1,==0
我怎样才能把Print语句放在哪里,以便我能够看到发生了什么?
我已经尝试了很多方法,并且重新初始化了i=0来尝试交替循环,这样我就可以引用v1元素,但是所有的尝试都失败了。
基本上,我想查看之前的分形,或将它们标记为A高、B低等,以便将来可能用于ABCD方案类型的EA。
目前,我主要是想打印v1,以便我可以看到它在做什么。
也许我可以设计一些东西来选择上一个分形,如A_high和/或B_low或一些类似的方案。
我是否走错了方向?
请指教
谢谢
我想用一个FOR循环来代替。因为你知道确切的条数,所以更容易使用,加上i永远不会<0,这有助于避免混淆。
For (int i=Bars-1;i>0;i--) {
//代码
}
试着将所有的数组值设置为0,然后再去分配指标值。另外,在分配完指标值后直接尝试print()。看看它是否真的返回任何东西。
我想,你最好的办法是给数组指定一个大小。比如,1000个位置。你不太可能需要这么多,而且这将减少你的计算量。你所需要做的就是循环查看最后999个条形图,然后赋值。我记得MT4在数组初始化和其他方面有问题。
阵列问题
我想用FOR循环来代替。如果你忘了包括i------,while循环会导致锁定。因为你知道确切的条数,所以更容易使用,再加上i永远不会<0,这有助于避免混淆。
对于(int i=Bars-1;i>0;i--){
//代码
}
试着将所有的数组值设置为0,然后再去分配指标值。另外,在分配完指标值后直接尝试print()。看看它是否真的返回任何东西。
我想,你最好的办法是给数组指定一个大小。比如,1000个位置。你不太可能需要这么多,而且这将减少你的计算量。你所需要做的就是循环查看最后999个条形图,然后赋值。我记得MT4在数组初始化和其他方面有问题。好的,谢谢,我会试试的。
虽然while语句运行良好,但它不能帮助我获得我想打印/查看的数组元素 等。
我会按照你说的去做,做一些测试,然后再发回来。
谢谢
我想用一个FOR循环来代替。如果你忘了包括i------,while循环会导致锁定。因为你知道确切的条数,所以更容易使用,而且i永远不会<0,这有助于避免混淆。
对于(int i=Bars-1;i>0;i--) {
//代码
}
试着将所有的数组值设置为0,然后再去分配指标值。另外,在分配完指标值后直接尝试print()。看看它是否真的返回了什么。
我想,你最好的办法是给数组指定一个大小。比如,1000个位置。你不太可能需要这么多,而且这将减少你的计算量。你所需要做的就是循环查看最后999个条形图,然后赋值。我记得MT4在数组初始化和其他方面有问题。仍然只是打印所有0的条目的数组。
很奇怪
Argent86,
你的代码中有几个错误。以下是您在没有这些问题的情况下所做的尝试
从MQ4访问一个带有:变量参数表的dll函数
你好。
有谁知道这是否可行:导入一个dll函数,该函数使用的参数是:可变参数列表。
例如:vprintf - C++参考资料
int vprintf ( const char * format, va_list arg ) 。
如果是这样,该怎么做?
谢谢
MJ
如何调用没有返回值的函数
大家好。
在我的程序中,我想调用一个函数。
但是该函数没有返回值(void)。那么我如何调用这个函数呢?
以便在我调用函数的地方准确地执行函数中的代码。
就像它本身写在那个地方一样?
我在下面做了一些示例代码......在那里我检查了一些参数,如果OK,我想执行这个函数......。
希望有人能帮我解决这个问题,谢谢你,Jonkie76
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
//----
if (Price >= PRICE_CLOSE)
call function ; // 这时我想调用函数.怎么做?
否则
Alert("Do nothing"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNCTIONS
//===================================================================+
//----------------------- 关闭订单功能 ----------------------+
空白subCloseOrder()
{
int
i,
total = 0,
ticket = 0。
err = 0。
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderSymbol()==Symbol() &&)
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet) 。
err=GetLastError()。
如果(err==0)
{
if(ticket>0) break;
}
否则
{
如果(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //忙乱错误
{
Sleep(5000);
继续。
}
否则 //正常错误
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}
这很简单。你只需要调用它,因为它将返回一些东西,只是你不需要保存任何结果,因为无效类型根本就没有结果。(不返回任何东西)像这样。
int start()
{
//----
if (Price >= PRICE_CLOSE)
subCloseOrder(); // At this point I'd like to call the function.How do I do that?
else
Alert("Do nothing"); //
//----
return(0);
}
用 "void "代替。像这样:
{
...
//
//
// no need to place return at the end, but if you want then use "just" return, like this
//
//
return;
}Void意味着它不会从一个函数 中返回值,这样它就有效地成为一个过程,而不是一个函数。
伙计们,姑娘们,你们好。
在我的程序中的某个时刻,我想调用一个函数。
但是这个函数没有返回值(void)。那么我如何调用这个函数呢?
以便在我调用它的地方准确地执行函数中的代码。
就像它本身写在那个地方一样?
我在下面做了一些示例代码......在那里我检查了一些参数,如果OK,我想执行这个函数......。
希望有人能帮我解决这个问题,谢谢你,Jonkie76
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
//----
if (Price >= PRICE_CLOSE)
call function ; // 这时我想调用函数.怎么做?
否则
Alert("Do nothing"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNCTIONS
//===================================================================+
//----------------------- 关闭订单功能 ----------------------+
空白subCloseOrder()
{
int
i,
total = 0,
ticket = 0。
err = 0。
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderSymbol()==Symbol() &&)
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet) 。
err=GetLastError()。
如果(err==0)
{
if(ticket>0) break;
}
否则
{
如果(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //忙乱错误
{
Sleep(5000);
继续。
}
否则 //正常错误
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}