打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
sparkho的空间

第一步:下载新版的DLL,和授权程序,并取得授权。

SP授权程序(更新2012.6)下载:SP授权2012.exe

最新DLL文件(2012.6.24更新)下载:SparkHo.dll

如何取得授权,请参考:

http://hi.baidu.com/sparkho/item/861da5098fcf88304bc4a36d

第二步:预警或选股前的设置:

1)打开D:\SparkHo文件夹,创建一个文本文件"sender.txt”,把用户的email信息(你自己发信的Email账户)存放在该文件(共两行)。

"D:\SparkHo\sender.txt"的格式:

XXXXX@qq.com

1234567890

共两行,第一行存放用户email账号,第二行存放email的登录密码。

2)打开D:\SparkHo文件夹,创建一个文本文件"email.txt",用于存放email的收件邮址列表(多行,需要收信的张三、李四、王五等等,把他们的Email地址都放在列表中…)。

"D:\SparkHo\email.txt"的格式:

XXXXX@msn.com

XXXXX@qq.com

XXXXX@139.com

多行,每一行代表一个email地址。

3)打开D:\SparkHo文件夹,创建一个文本文件"预警名称.txt",用于存放用户自定义的预警名称(多行)。

"D:\SparkHo\预警名称.txt"的格式:

风起

我曾推荐的MT4,除了外汇行情,同时也能看股指(包括DAX、DJI)期货、原油、黄金等行情。

Alpari NZ mt4(可申请模拟账户)的下载:

NZ_mt4setup.exe

服务器的时间:London+2:00

真实的Alpari UK账户,则看不到股指的图表。

对于超短线的Scalping交易者,点差是个重要因素。有个网站,可比较实时或平均的点差。

http://www.fxintel.com/

比较了一下,有几个交易商可以考虑。而俺首选的是:

http://www.mbtrading.co.uk/

登记用户后,便可开立模拟账户。

既然号称是EXN (Electronic Xrossing Network) system(一种ECN平台),首先面对的,就是服务器规则的变化。

1)下单的时候,不带止盈止损。等该单成交后,才可以设置止盈止损。

2)设置了止盈价,价位到了,有可能部分成交,原来的订单会被分解为多个单号…

3)服务器系统时间:

MBT总部在美国,所以系统时间是NewYork时间(东部时间,UTC-5)。

现在的时间对比(现在正值欧美的夏令时):

北京时间(localtime) : 01:50 2012/6/20

MBT EXN 系统时间 : 13:50 = NewYork时间(13:50) 

问题:能否像交易测试那样,把自己的交易记录在图表中显示?

答案当然是可以的。

在网上找到一个参考的源码:http://13615863.blog.hexun.com/58355486_d.html

只是他没有考虑pending orders的情况。

指标的主线,就是围绕OrdersHistoryTotal()函数:它返回已结束的订单数量。

也就是说,开了单而没有结束的,不包括在内,正常的BUY或者SELL单,结束后才会显示;

而一个pending order被触及,它会转化成一个BUY或者SELL单,在OrdersHistoryTotal中,之前的预设单的信息不会被显示;

而没有被触及的pending order,其后又被取消了,在OrdersHistoryTotal中作为一个已结束的订单存在。

下载:ShowHistoryOrders

同理,如果需要显示还没完成的订单,需要用另一个函数OrdersTotal()…

系统重装后,需要装上中投证券的交易软件,发现中投证券网页改版了...

而最新供下载的超强版交易软件,居然是通达信“金融终端”的最新版V6.25,比试用版V6.15还要新,就是缺了国际市场和外汇而已...

新版的“金融终端”,当天选股,亦可以应用小于日线的周期,比如60分钟乃至1分钟周期了;但是利用历史数据选股--就只支持日线周期。

最受欢迎的就是,分时图的主图指标,也可以调出来了,因为通达信的分时图数据存在服务器里,这样只要联网你就可以调出历史分时图,以供研究。。。

俺们熟知MACD的传统算法:

DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);

DEA:EMA(DIF,MID);

MACD:(DIF-DEA)*2,COLORSTICK;

注:EMA的英文全称Exponential Moving Average,中文解释:加权移动平均指数指标。EMA(X,N)是一个递归算法:Y[i]= (2*X[i]+(N-1)*Y[i-1])/(N+1)

于是,MACD有两根线,DIF代表收盘价的短期(参数12)EMA与长期(参数26)EMA之差,DEA则是DIF的(参数9)EMA;还有一根柱,代表DIF与DEA之差的2倍。

可是,打开MT4自带的MACD图表,确实有点蒙了,它仅有一根线和一根柱。无奈,只好自己重做一个。

因为是递归算法,用DLL来编写,较为简单;

注:DLL与mql4程序交换数据时,需要用到2个临时数组tmp1[]、tmp2[],用来存放短期和长期的EMA,而在mql4程序中这2个非指标数组,必须分配空间(ArrayResize)后才能使用。

C++ 代码:

MT4_EXPFUNC int __stdcall GetMACD(const RateInfo* rates,const int rates_total,const int rates_count,const int nfast,const int nslow,const int nsignal,double *arMACD,double *arDIF,double *arDEA,double *tmp1,double *tmp2)

{

 int i,nStart;

 if( rates_count<2 ) 

 {

  nStart=1;

  tmp1[0] = rates[0].close;

  tmp2[0] = rates[0].close;

  arDIF[0] = 0;

  arDEA[0] = 0;

 }

 else nStart=rates_count-1;

 for ( i = nStart; i < rates_total; i++ )   

 {

  tmp1[i]   =

欧洲夏令时是为了利用季节性的日光而在春季开始提前一个小时的作息方法。此方法在全欧洲除冰岛外的所有国家实行(冰岛全年实行格林尼治时间)。在欧盟国家和其他一些非欧盟国家中,此方法实行时期从每年三月份的最后一个周日1:00(格林尼治时间)开始,至十月份最后一个周日 1:00(格林尼治时间)结束。自1981年起,规定了统一的夏令时开始时间(在3月最后一个周日的格林尼治时间1:00将时间调前1小时),但是结束的时间并不一致,1998年,这一日期再一次被修改为10月的最后一个周日。目前,这一时间范围定为永久有效。

这里,存在一个mt4时间的自动调整问题。

当欧洲实行了夏令时,mt4服务器记录的时间就变成夏令时了,这个时候如果需要精确求出对应的亚洲时间(比如北京时间),那就需要知道当年的欧洲夏令时起止的时间,否则得出的结果,就可能会有一小时的误差。

在C++的struct tm中有一个tm_isdst的属性,从这里来判断是否是实行夏令时?但是尝试了一下,好像不行,都返还0。

但是,利用struct tm的另外一个属性tm_wday(取值区间为[0,6],其中0代表星期天,1代表星期一...),可以从3月31日倒推出第一个星期天,即为夏令时的起

飞狐实时的预警信号,转到webQQ自动发信,是俺研究webQQ的初衷。

原本以为很简单的事情,做起来却又没那么简单,发QQ微博相对来说,比较简单:认证登录后,即可发布微博信息,全过程通过DLL自身就能实现。

而webQQ发信,存在保持在线的问题:通常必须有一个webQQ用户端,登录成功后,还需另开一个线程--不断的POLL,才能保证连线;在webQQ用户端有效连线的前提下,DLL可利用相同的Cookies和相关的登录信息,通过webQQ协议,便能即时发信。

于是,终于可以在DLL实现了预警webQQ发信...

当然,完全通过DLL上实现webQQ发信的全过程,也得考虑DLL的效率问题,能否另辟蹊径呢?

于是想到一个方案:既然必须存在一个webQQ无时不刻都在工作,那自动发信也交给它去处理吧,DLL负责给出预警信号写到指定的文件中,那个webQQ用户端负责检测(另开一个线程),如有新信息到来,就实施发送...

1)DLL只负责更新一个TXT文件D:\SparkHo\alert_today.txt,预警信号出现时,就把序号和预警内容,添加在TXT文件中......

格式:

#12#300148 天舟文化 D巅峰飞越 10月20日 10:04:42 预警价格:20.90↑8.57%

在DLL中,添加一个子程序把eMsg写到TXT文件中...

string QQ_txtwrite(string eMsg)

{

 int outNo = 0;

 char strno[3];

 size_t i,j;

 ifstream in("D:\\SparkHo\\alert_to

PostMessage和SendMessage 的简单区别:PostMessage 是发出去就返回;而是SendMessage发出去,等到被执行了再返回。

PostMessage:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。

SendMessage:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。发送线程被阻塞直到接收线程处理完消息为止。

问题:使用PostMessage来发送字符串数据到主界面,由于字符串是临时变量,而PostMessage是异步发送,有时候由于主界面接收到数据的时候,系统已经将字符串占用的内存释放了,造成获取的字符串可能出现乱码的现象!

那么,如何才能避免这种情况?

尝试1:手动申请一段内存空间,在堆上申请的内存需要自己手动释放:使用New方法来申请内存,使用delete[] 来释放申请的内存。

char* newstr = new char[give.length()];

strcpy(newstr,give.c_str());

HWND hfwnd = FindWindow("SDKWin","webQQ专用");

PostMessage(hfwnd,WM_MYMSG,(WPARAM)newstr,0);

//if(newstr) delete[] newstr;  加上这行,会导致程序崩溃,不知何

c++ string本身,好像没有全替换的函数,但提供了find方法来寻找指定的字符串,然后可用replace方法来实现字符串的替换。因此,自编了一个:

string RPLChar(string content,string find,string rel)

{

 size_t found=0;

 while(found < content.length())

 {

  found=content.find(find.c_str(),found,find.length());

  if(found < content.length())

  {

   content = content.replace(found,find.length(),rel.c_str());

   found = found + rel.length();

  }

  else break;

 }

 return content;

}

按照文档说明:find如果没找到相应的字符串,将返回结果string::npos。我在while中设置条件found!=string::npos,往往导致程序崩溃...死循环。关键是find的返回结果,它是size_t类型亦即unsigned类型,先不理会string::npos的值,如果找到字符串,其位置肯定小于string的长度length(),于是俺就用这个做判断find成功与否。

1)WIN32 的EDITBOX,设置属性"|ES_MULTILINE",便可显示多行文本,换行符是\r\n,2个字节。

2)通过webQQ抓包,代表换行的字符串,有三种:是\r或者\n,或者他们的组合\r\n;如果是\n\r,则会换2行。

webQQ收信息的格式中,遇到\r就是是换行符,如:

"First Line Message;\r2nd Line Message;\rAnd 3rd Line Message..."

收信后转换,在EditBox显

抓包发现:webQQ登陆后,可选择变更成几种不同的状态,对应的英文代码:

1)我在线上:online

2)Q我吧:callme

3)离开:away

4)忙碌:busy

5)请勿打扰:silent

6)隐身:hidden

7)离线:offline

编写了一个程序:利用上述英文代码做参数,实现webQQ状态的变更。

如:要变更成隐身状态,可执行如下代码:

string newstatus = "hidden";

string result = WebQQ_changestatus(newstatus);

C++ (with libcurl)源程序

string WebQQ_changestatus(string newstatus)

{

 // 提取QQ登录信息:

 char buf[1024];

 size_t found,found2;

 string clientid,psessionid;

 ifstream QQLoginfile("D:\\SparkHo\\QQLogin.txt"); 

 if(!QQLoginfile)

 {

  QQLoginfile.close();

  clientid = "";

  psessionid = "";

 }

 else

 {

  QQLoginfile.read(buf,1024);

  string QQLogin = (string) buf;

  QQLoginfile.close();

  found  = QQLogin.find("ClientID");

  found2 = QQLogin.find(";",found+9,1);

  clientid = QQLogin.substr(found+9,found2-found-9);

  found  = QQLogin.find("psessionid");

  found2 = QQLogin.find(";",found+11,1);

  psessionid = QQLogin.substr(found+11,found2-found-11);

 }

 string buffer;

 string get_url

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
fgetpos:取得当前文件的句柄函数
在VBA中使用WINDOWS API
【大智慧】DLL高手请过来,关于大智慧文本DLL函数的想法!
软件漏洞分析入门(五)初级栈溢出D_植入任意代码
Excel VBA(宏)精简(四)
Delphi 7.0常用函数速查手册
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服