如何编码? - 页 303

 

另一个初学者的问题

你好,我是编程新手,但不是交易新手。我有一段时间没有发帖,现在,自从我开始开发我的EA,我有很多问题。我先从建立一个指标开始,一旦它达到我想要的效果,我就会进一步开发。我阅读了所有我能找到的手册,所以现在是时候让我继续编写代码了。

对不起,如果这是个错误的主题--请让我知道我应该在哪里发布这样的问题。

我现在有两个,可能是基本的问题,请问。

1.在许多使用MAs的指标中,我看到了检查图表上有多少条的线条。那么,如果我需要MA200,而图表上只有,比如说,100条,那么iMA200能工作吗?我想是的--我检查过了,任何MA在任何图表上绘制都没有问题,所以我想这是Metaquotes现在修复的一个旧的错误。那么,在绘制MA或使用iMA功能时,是否有必要检查图表上有多少条?

2.2.Close和iClose之间有什么区别?我的理解是,Close只能返回当前图表上的收盘价,而iClose可以返回任何货币对 和任何时间框架的任何收盘价。在这两种情况下,为了获得最后一个收盘条,我必须使用索引[1]。我的看法正确吗?

谢谢你。

 

我已经这样做了。请看下面突出显示的红色。

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

如果(OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

返回(WinLossPreviousShort)。

}

如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

返回 (WinLossPreviousShort);

}

}

}

还是完全空白。

挠挠头。我知道你的帮助是有限的,因为我没有粘贴代码,但你觉得上面的代码看起来可以吗?

还有下面的第一行,我是否需要在LastOpenTicket后面加上()来引用?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

 

...

如果你在调用该函数 时将最后一张开仓的票号作为参数,那么蓝线后的代码将永远不会被执行(如果LastOpenTicket号码为-1(在那一刻相当于LastOpenTicket()函数的结果),OrderSelect()就会失败,代码也不会得到执行蓝线后的块。)

crsnape@btinternet.com:
我已经这么做了。请看下面的红色标注。

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

如果(OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

返回(WinLossPreviousShort)。

}

如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

返回 (WinLossPreviousShort);

}

}

}

还是完全空白。

挠挠头。我知道你的帮助是有限的,因为我没有粘贴代码,但你觉得上面的代码看起来可以吗?

还有下面第一行,我是否需要在LastOpenTicket后面加上()?

字符串 GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
 

我不确定我是否理解。

如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1)

所以,因为我在上面一行中调用了LastOpenTicket()函数,该函数的其余部分没有被执行,OrderSelect()失败。我的理解对吗?

 

...

让我们假设以下情况。

- 你之前没有订单

- LastOpenedTicket()的结果是-1(没有以前的订单)。

- 你用这个结果调用函数

OrderSelect()失败了,因为订单票-1不存在,订单选择背后的代码都没有被执行。即使在LastOpenTicket>-1的情况下,LastOpenTicket()==-1的 "蓝线条件 "也不可能为真,因为只有在LastOpenTicket>-1的情况下,才能进入这部分代码。

这就是为什么我建议 "第三种状态:Na",因为事实上你确实有3种状态,因为开始的 "没有先前订单 "状态

crsnape@btinternet.com:
我不确定我是否理解。

如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1)

所以,因为我在上面一行中调用了LastOpenTicket()函数,所以该函数的其余部分没有被执行,OrderSelect()失败。我的理解对吗?
 

一些编码问题,可能是初学者的问题

你好,我是编程新手,但不是交易新手。我正在建立我的EA,但先从建立一个指标开始,一旦它做到了我想要的,我就会进一步去做。我阅读了所有我能找到的手册,现在正在进行编码。

希望得到任何建议--你们都是从我现在的位置开始的......

我现在有两个可能是基本的问题,请问。

1.在一些使用MAs的指标中,我看到了检查图表上有多少条的线条。那么,如果我需要MA200,而图表上只有,例如,100条,那么iMA200能工作吗?我想是的--我检查过了,任何MA在任何图表上绘制都没有问题,所以我想这是一个老问题,Metaquotes现在已经修复了。那么,在绘制MA或使用iMA功能时,是否有必要检查图表上有多少条?

2.2.Close和iClose之间有什么区别?我的理解是,Close只能返回当前图表上的收盘价,而iClose可以返回任何货币对 和任何时间框架的任何收盘价。在这两种情况下,为了获得最后一个收盘条,我必须使用索引[1]。这样做对吗?

谢谢你。

 

像这样吗?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

如果(OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

返回(WinLossPreviousShort)。

}

如果(OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

返回 (WinLossPreviousShort);

}

如果(LastOpenTicket() == -1)

{

WinLossPreviousShort = "NA";

返回 (WinLossPreviousShort);

}

}

}

OR THIS? 变化为红色。

//---- 判断之前的卖单是否有利可图

string GetWinLossPreviousShort (int LastOpenTicket,int LastTicket, string WinLossPreviousShort)

{

如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

如果(OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

返回(WinLossPreviousShort)。

}

如果(OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

返回 (WinLossPreviousShort);

}

如果(LastTicket == -1)

{

WinLossPreviousShort = "NA"。

返回 (WinLossPreviousShort);

}

}

}

 

啊,它终于被点击了,我不能在票号为-1的情况下使用OrderSelect,因为-1并不存在。票数从0往上走。

我需要在OrderSend函数 之外声明LastOpenTicket,对吗?

 

...

像这样尝试:

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

//

//

// if LastTicket == -1 no need even to try to execute the code bellow

// you already have exited for case when it is -1, so the code bellow

// will be executed properly

//

//

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}
 

谢谢mladen,下面的代码基本上等于和你的一样吗?我是在你发表最后一篇文章的时候打的这个字!:-)

已编辑

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

如果(OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

返回(WinLossPreviousShort)。

}

如果(OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

返回 (WinLossPreviousShort);

}

}

如果(LastTicket == -1)

{

WinLossPreviousShort = "NA"。

返回(WinLossPreviousShort)。

}

}