新手的冒险 - 页 7

 
niko:

致CB。


嘿,高空飞人!我在蒂姆的任务中做了所有能做的事情,因此决定开始更详细地查看你的代码。我对蒂姆的任务做了我能做的一切,因此决定开始更详细地查看你的代码。


我浏览了你的代码,试图理解并修复其中的错误。我设法把错误减少到只有字符串fnGenerateSignal()的'不平衡的小括号'。我不知道为什么它在这种情况下说不平衡。


像往常一样,我很感谢你对我的代码进展的看法!请记住,仍然有很多问题需要解决。请记住,我仍然有很多不明白的地方,甚至是非常基本的东西。

请看注释。

注意到以下几点。

- 你在声明函数 时希望将变量作为参数传给它们,但实际上却没有在函数调用中传给它们--所以我要求你将变量移到最上面的块中,这样它们就可以在你的所有函数中使用了--现在让我们尽量保持简单。

- 你似乎认为你必须把你的函数的名字也声明为一个变量。下面是如何使用函数,将变量传入和传出。


要声明。

int abcdef(int x, string s) //意味着名称为abcdef的函数接受一个整数和一个字符串的输入,并返回一个整数作为其输出(在本例中是0或9)。

{

该函数对x和s做一些处理

如果(某些条件)

返回(9)。

否则

返回(0)。

}


而要调用。

...

myResponse = abcdef(myInteger, myString)。

如果(myResponse == 9)

{

blah

附加的文件:
 

嘿,CB。

谢谢你。这是我想不明白的地方,你让我非常清楚。我想我现在是在正确的路线上。

CB,问题1。

bool fnOrderDuplicate()

{

iDuplicateOrders=0 // CB不应该将iDuplicateOrders声明为int或double?

iOrders = OrdersTotal()-1 //在你的帮助下我现在明白了,这是在调用OrdersTotal函数。但同样,iOrders不应该被声明为一个变量吗?

CB,question2:

int fnTrade() //为什么不是 "int fnTrade(string sSignal)",因为我们在函数中使用sSignal。?

{ if(sSignal=="OP_BUY")

...

CB,quesytion3:

你让我去掉代码末尾的return(0)和}。但这意味着Start()不会以典型的'return(0)和括号关闭,因为所有的前括号(从我检查的结果来看)都是我们设计的特定函数的打开和关闭。?

 
niko:

嘿,CB。

谢谢你。这是我搞不清楚的地方,你让我非常清楚。我想我现在是在正确的路线上。

CB,问题1。

bool fnOrderDuplicate()

{

iDuplicateOrders=0 // CB不应该将iDuplicateOrders声明为int或double?

iOrders = OrdersTotal()-1 //在你的帮助下我现在明白了,这是在调用OrdersTotal函数。但同样,iOrders不应该被声明为一个变量吗?

CB,question2:

int fnTrade() //为什么不是 "int fnTrade(string sSignal)",因为我们在函数中使用sSignal。?

{ if(sSignal=="OP_BUY")

...

CB,quesytion3:

你让我去掉代码末尾的return(0)和}。但这意味着Start()不会以典型的'return(0)和括号关闭,因为所有的前括号(从我检查的结果来看)都是我们设计的特定函数的打开和关闭。?

Q1:这两个变量都是定义的。看看我建议你移到你定义externs的部分的变量。这将自动使它们对所有函数 可用。

Q2:变量sSignal,如果在所有函数之外声明,那么所有函数都可以使用,而不需要在函数调用中明确传递它。

Q3: 啊--现在我明白你的误解了。我想知道你为什么把返回语句和大括号放在那里。我对 fnTrade() 语句的评论已经照顾到了这一点。你会注意到我要求你在那里添加一个返回调用和封闭括号。原因是你在start()函数代码块中(错误地)声明了你的所有函数。


CB

 
niko wrote>>

嘿,蒂姆。

我做了你要求我做的代码的部分。谢谢你对我的问题提供了详细的答案,并在整个代码中写了很多评论,帮助我理清思路。我开始明白事情是如何拼凑起来的,如何正确使用数组和调用特定函数(以及全局变量和局部变量的作用)。

我附上了我们代码的最新版本。

有一个问题,为什么我们没有让EntryRules函数包含所有的东西(包括标志)来给我们一个买入/卖出的条件,而是在后来用标志来调用它,以做出进场的决定,这有什么原因吗?

你好,尼克


我整理了代码中的一些东西,希望能回答你的问题。EntryFunction现在已经完成了。你只需要像我在代码中指出的那样,从开始(主)函数中调用它,并将所需的参数传给它,如图所示。我希望这只是几分钟的工作,然后你就可以开始编译和测试了。我希望你会遇到一些小错误,但希望没有什么大问题。


编译完成后,尝试在测试器中运行EA,并查看日志文件,看看它是否出现了你在这个阶段所期望的情况。你应该能够看到每个货币对的买入和卖出信号。


我想说,在这一点上,你的代码已经完成了大约75%。


此后的下一步是编写另一个函数,检查给定货币对和交易方向的未结订单。


我建议看一下MT4文档中的交易函数。OrdersTotal(), OrderSelect(), Order Symbol() & OrderType()看起来是这项任务的候选函数。


至于你提出的让 EntryRules 函数包含所有内容(包括标志)的问题,我看不出有什么理由。你为什么不试着修改EntryRules函数呢?

我建议你在编译、运行和测试了你已经做的事情之后再做这件事。


谢谢

蒂姆

附加的文件:
 

CB:谢谢你,这对我来说有助于进一步澄清事情。出于某种原因,我以为所有的东西都必须在启动函数中。

问题是。我们不应该在启动函数中声明EMA,因为我们想让它们在每一个刻度 上计算/更新?

 

嗨,蒂姆:再次感谢你的帮助。今天晚上一下班,我就会在我这边进行工作。与你和CB合作,我现在对如何把事情放在一起有了更多的想法,并开始更灵活地考虑这一切。

 
niko:

CB:谢谢你,这对我来说有助于进一步澄清事情。出于某种原因,我以为所有的东西都必须在启动函数中。

问题是。我们不应该在启动函数中声明EMA,因为我们想让它们在每一个刻度上都得到计算/更新?

如果你在一个函数 中声明一个变量,它只能在该函数中使用。如果你在所有的函数之外声明它,它对所有的函数都是可用的。因此,你可以在顶部声明ema变量,然后在起始函数中对它们进行计算。


CB

 
cloudbreaker wrote>>

如果你在一个函数中声明一个变量,它只在该函数中可用。如果你在所有函数之外声明它,它对所有函数都是可用的。因此,你可以在顶部声明EMA变量,然后在起始函数中对其进行数学运算。

CB

谢谢你CB,我现在明白了!

 

嗨,蒂姆。


我现在从土耳其回来了。我在库萨达斯度过了一段美妙的时光,真的不想离开。土耳其人比英国人要友好得多。我在那里有家的感觉,尽管我以前从未去过那里。


我花了5个小时左右的时间来升级我们正在设计的代码。我把它附在后面。

关键的修正是。

1.我创建了一个订单计数函数,并在start函数中调用它。我预计这里面会有很多错误,因为有些地方我还是不明白(例如:如何确保它跟随[c]循环,以便它只对每个货币对起 作用)。

2.我试图纠正代码中关于currencySymbol与currencySym的名称,因为我们在中途改变了名称。但这可能会被混淆。

3.3.我在start函数中调用了EntryRules函数。


如果你能纠正这些大大小小的错误,我将非常感激,如果你继续介绍//为什么旧的代码是错误的,评论,这有助于我纠正我的逻辑思维。


一如既往地热切期待您的修正!

附加的文件:
 

嘿,CB。


我想蒂姆现在正在度假,因为我已经好几天没有听到他的消息了。因此,我继续使用你的代码,因为这将有助于我的交易(因为我现在是手动交易策略,这意味着要早早起床,等等)。我按照你的要求修改了所有的代码,但由于某些原因,它仍然返回一个错误(这次是与"=="有关,非常奇怪)。


另一件事是我注意到启动函数 没有关闭。所以我在开始()内的第一个函数后添加了"}",如果我们不这样做,代码会在随后的函数字符串fnGenerateSignal()中产生错误(说该函数的定义是意外的)。


谢谢你一如既往的支持。我期待着你的评论/修正!

尼克

附加的文件: