16 12
发新话题
打印

[指标EA编写讨论] 请教动态计算浮赢浮亏问题

本主题由 xfxyldj 于 2007-11-18 00:50 分割

请教动态计算浮赢浮亏问题

最近研究程序。对价格变动每次调用,和只调用一次 有些迷糊。问题如下,谢谢解答者!
int start()
void OpenOrders()
void CloseOrders()
每次价格变动的时候程序就会读一次。 那么我的问题是,读程序的顺序 ,是怎样的。先读int start() 的内容吗,还是从上到下读。
我看到有些把int start() 都写到了程序行的最后。
另外,对于比如iMA这种计算结果的式子,需要放到什么地方才是每次都调用。 我放到void OpenOrders()里边 的话, void CloseOrders()就不能用,  放在外边。程序又老提示出错说 不应该放这里,编译不过。
望哪位帮忙解答一下。
很是感谢!

[ 本帖最后由 dongke 于 2007-11-17 23:13 编辑 ]

TOP

1、你需要了解子程序的定义和用法。仔细研究下吧。
2、int start()类似于C语言中的main()程序。和他所在的位置没有关系。
3、子程序在调用的时候才会被执行,如果不调用就不会被执行。子程序的调用必须在int start()中(或者镶嵌调用)
4、对于iMA()函数相当于一个变量来使用。因此不论在子程序还是在主程序中,它不是一个函数。因此不能写在程序外面。你可以定义一个全局变量。把iMA()的值在int start()赋予这个变量。在子程序中调用这个全局变量就可以了。
5、每次价格变动的时候只有int start()被执行了一次,如果在int start()中没有达到调用子程序的条件,子程序是不会被执行的。
6、写了这么多突然发现,问题出在你对子程序的理解上。

[ 本帖最后由 xfxyldj 于 2007-11-17 20:45 编辑 ]

TOP

欧。 版主写得相当详细。。
我完全清楚这个逻辑了。
以前学的是basic  对c 基础性的东西不够了解。谢谢热心版主

TOP

我觉得我提出的问题或许以后有人碰到会翻翻帖子。也不用老开贴问了。 哈哈。
问题如下:
1、如果现在我用
ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,orderprice,2,0,0,"limitbuy",uniqueGridMagic,0,Green);
ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,orderprice,2,0,0,"limitsell",uniqueGridMagic,0,Red);  两个命令下了2个挂单。
如果过了一阵挂上了一个。 另外一个还没挂上。
OrdersTotal() 返回的值 是1 还是2 呢?
那我现在要计算第一个成交的单的浮赢应该用OrderTakeProfit()命令
怎么指定是哪个单的profit呢。 是这样写吗OrderTakeProfit(ticket)  ??

请教,help里边解释用了一个print 并没说怎么选择指定的订单 的赢利问题。 我就是不知道如何对号入座

谢谢!

TOP

for ( int m=1;m<=ticket;m++)
        {
         if(OrderSelect(m,SELECT_BY_POS)==true)
         {
         currentprofit+=OrderTakeProfit();
         }
        }
不知道是不是这样。  这样对吗?? 感谢!

TOP

回复 4楼 的帖子

1、OrdersTotal() 返回的是2
2、OrderTakeProfit()函数必须在OrderSelect()函数之后。并且没有形参。返回OrderSelect()函数选中的那个订单的盈利。
3、对于订单的选择,你可以研究下“编程讲解里面那个MACD例子程序”。
4、你那个循环看上去有些问题。OrderSelect()可以选中成交的和未成交的订单(挂单)。

TOP

解释得太清楚了。 完全明白了。

TOP

版主,我最后写成了这样加了判断。不过还是功能没出来。代码如下。请看哪里有错。
    for ( int m=1;m<=totalorders;m++)
        {
         if(OrderSelect(m,SELECT_BY_POS)==true && (OrderType() == OP_BUY || OrderType() == OP_SELL))
         {
         OrderSelect(m,SELECT_BY_POS);
         currentprofit+=OrderTakeProfit();
         }
        }
     Comment("Current profit is",currentprofit);

TOP

是不是orderselect 命令没弄对。
请教版主关于这几个命令的区别。
OrderSelect(m,SELECT_BY_TICKET);
OrderSelect(m,SELECT_BY_POS);
OrderSelect(m,SELECT_BY_POS,MODE_TRADES);
啥区别呢。

TOP

区别我现在能搞清楚了。SELECT_BY_POS 是根据单顺序来选择,而ticket是根据订单号码来选择。我把程序改了一下。不过好像还是没反映。 我没招了。请教
    for ( int m=1;m<=totalorders;m++)
        {
         if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)==true && (OrderType() == OP_BUY || OrderType() == OP_SELL))
         {
                currentprofit=OrderTakeProfit()+currentprofit;
         }
        }
     Comment("Current profit is","  ",currentprofit);

currentprofit老不计算,要不就是comment的问题。

TOP

 16 12
发新话题