交易危机

 找回密码
 快捷注册(禁q号)

QQ登录

只需一步,快速开始

搜索
广告位
查看: 14039|回复: 13
打印 上一主题 下一主题

[价格] K线剩余时间显示,可直接下载使用

[复制链接]

29

主题

1223

积分

1

精华

初级操盘手

金钱
1223 美元
权重
14
跳转到指定楼层
楼主
发表于 2014-3-10 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
K线剩余时间显示
原作者:道长,鸣谢
代码:

  1. #property copyright "111"
  2. #property link      "111"
  3. #property indicator_chart_window
  4. #property indicator_buffers 0
  5. #define OBJECT_NAME                "111"
  6. #define MSG_PREFIX                "<-- "
  7. #define MAX_VALUE                "999d hh:mm:ss"
  8. #define DEFAULT_FONT        "Arial"
  9. #define DEFAULT_SIZE        10
  10. #define DEFAULT_COLOR        Gold
  11. extern int Right_Shift_from_Bar = 4;
  12. int                DAY_SECONDS; // constant
  13. string        MAX_PADDING;
  14. int                MAX_LENGTH; // constant
  15.        
  16. color        col                        = DEFAULT_COLOR;
  17. int                fontSize        = DEFAULT_SIZE;
  18. int init() {
  19.         DAY_SECONDS        = PERIOD_D1 * 60; // constant
  20.         MAX_PADDING = "";
  21.         /*        the coordinates for OBJ_TEXT point to the middle of the string. To make actual text begin where
  22.                 'time' parameter is, the string must be twice longer in pixels. Using space padding to do that.
  23.                 number of spaces required = usable string length. The actual string is not known at this point,
  24.                 therefore take the maximum possible and strip extra spaces later.
  25.         */
  26.         int totalSpaces = StringLen(MSG_PREFIX + MAX_VALUE);
  27.         for( int i = totalSpaces*1.5 + 1; i > 0; i--) // see the 'start()' method for explanation of 1.5
  28.                 MAX_PADDING = StringConcatenate(MAX_PADDING, " ");
  29.         MAX_LENGTH = StringLen(MAX_PADDING);
  30.        
  31.         return(0);
  32. }
  33.        
  34. int deinit() {
  35.         switch( UninitializeReason() ) {
  36.                 case REASON_CHARTCLOSE:
  37.                 case REASON_REMOVE:
  38.                 case REASON_RECOMPILE:
  39.                         Comment("");
  40.                         ObjectDelete( OBJECT_NAME );
  41.                         break;
  42.                 case REASON_CHARTCHANGE:        // leave the object the way it is if simply switching timeframes
  43.                 case REASON_PARAMETERS:
  44.                 case REASON_ACCOUNT:
  45.                         break;
  46.         }
  47.         return(0);
  48. }
  49. int start() {
  50.         datetime        barOpenTime         = Time[0];        // number of seconds elapsed from 00:00 January 1, 1970.
  51.         bool                hasHours                = (Period() > PERIOD_H1);        // need to display hours if timeframe is more than 1H
  52.         bool                hasDays                        = (Period() > PERIOD_D1);        // need to display days left
  53.         datetime        barCloseTime        = barOpenTime + Period()*60;
  54.         datetime        leftUntilClose        = barCloseTime - TimeCurrent();
  55.         string                msg                                = "";
  56.         bool                exists                        = false;
  57.         datetime        objectX                        = barOpenTime + Period()*60*Right_Shift_from_Bar;
  58.         double                objectY;
  59.         string                fontName                = NULL;        // do not change the font
  60.        
  61.         if( leftUntilClose <= 0 )
  62.                 leftUntilClose = 1;
  63.                
  64.         if( hasDays ) {
  65.                 msg = msg + (leftUntilClose / DAY_SECONDS) + "d ";
  66.                 leftUntilClose %= DAY_SECONDS;
  67.         }
  68.         msg        = msg + TimeToStr( leftUntilClose, TIME_SECONDS );
  69.        
  70.         if( !hasHours ) // '!hasHours' and 'hasDays' can not be 'true' at the same time
  71.                 msg = StringSubstr( msg, 3 ); // strip "hh:" portion
  72.         // the coordinates are the upper middle (wtf?) of the rectangle, so text "hangs" down. make it inside the bar by using whatever higher from open/close.
  73.         if( Open[0] >= Close[0] )
  74.                 objectY = Open[0];
  75.         else
  76.                 objectY = Close[0];
  77.        
  78.         Comment( msg + " left to bar end" );
  79.         msg = MSG_PREFIX + msg;
  80.         // now, as the X is the middle - exactly half of the text will be on the right of the desired point - so double the number of chars.
  81.         // the problem is that in a proportional font the space uses less width that normal character. about 1.5 times less.
  82.         // depends on the font, of course.
  83.         msg = StringSubstr( MAX_PADDING, MAX_LENGTH - StringLen(msg)*1.5 ) + msg;
  84.        
  85.         if( ObjectFind( OBJECT_NAME ) == -1 ) {
  86.                 ObjectCreate        ( OBJECT_NAME, OBJ_TEXT, 0, objectX, objectY );
  87.                 ObjectSet                ( OBJECT_NAME, OBJPROP_COLOR, col );
  88.                 ObjectSetText        ( OBJECT_NAME, msg, fontSize, DEFAULT_FONT );
  89.         }
  90.         saveProperties();
  91.         ObjectMove                ( OBJECT_NAME, 0, objectX, objectY );
  92.         ObjectSetText        ( OBJECT_NAME, msg, fontSize );
  93.         return(0);
  94. }
  95. void saveProperties() {
  96.         col                        = ObjectGet( OBJECT_NAME, OBJPROP_COLOR );
  97.         fontSize        = ObjectGet( OBJECT_NAME, OBJPROP_FONTSIZE );
  98. }
复制代码


K线剩余时间显示.zip

1.76 KB, 下载次数: 84, 下载积分: 金钱 -8

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 保留保留

1

主题

1380

积分

1

精华

初级操盘手

金钱
1380 美元
权重
0
沙发
发表于 2014-4-18 18:02 | 只看该作者
本帖最后由 wccmcd 于 2015-12-4 12:46 编辑

谢谢分享  

52

主题

1万

积分

4

精华

操盘专家

金钱
15549 美元
权重
22
板凳
发表于 2014-4-30 13:01 | 只看该作者
本帖最后由 wccmcd 于 2015-12-4 12:46 编辑

OK,3Q。

新手,膇醺 $  的娇巭

0

主题

27

积分

0

精华

外汇入门

金钱
27 美元
权重
0
地板
发表于 2016-12-9 18:44 | 只看该作者
谢谢分享

3

主题

242

积分

0

精华

见习操盘手

金钱
242 美元
权重
0
5
发表于 2016-12-12 12:48 | 只看该作者
谢谢分享

1

主题

32

积分

0

精华

外汇入门

金钱
32 美元
权重
0
6
发表于 2016-12-14 16:07 | 只看该作者
谢谢分享

2

主题

40

积分

0

精华

外汇入门

金钱
40 美元
权重
0
7
发表于 2017-12-14 12:15 | 只看该作者
赞~好东西~谢谢分享

0

主题

683

积分

0

精华

初级操盘手

金钱
683 美元
权重
0
8
发表于 2018-10-6 12:18 | 只看该作者
谢谢分享

1

主题

227

积分

0

精华

见习操盘手

金钱
227 美元
权重
0
9
发表于 2019-7-9 21:10 | 只看该作者
不错的指标

0

主题

49

积分

0

精华

外汇入门

金钱
49 美元
权重
0
10
发表于 2019-10-8 14:33 | 只看该作者
支持一下

3

主题

49

积分

0

精华

外汇入门

金钱
49 美元
权重
0
11
发表于 2019-11-7 22:51 | 只看该作者
好东西~谢谢分享

0

主题

60

积分

0

精华

外汇入门

金钱
60 美元
权重
0
12
发表于 2021-9-22 08:39 | 只看该作者
谢谢分享

2

主题

147

积分

0

精华

见习操盘手

金钱
147 美元
权重
0
13
发表于 2022-5-7 00:07 | 只看该作者
正在找这个

3

主题

296

积分

0

精华

见习操盘手

金钱
296 美元
权重
0
14
发表于 2022-8-27 00:08 | 只看该作者
通达信可以用的有吗
您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

QQ|黄金吧|黄金论坛|手机版|指标下载|非农|目录|交易危机

版权所有: ©2014-2021 fx3q.com Powered by Discuz! X3
浙ICP备: ICP14039028

浙公网安备 33011802001420号

风险提示:杠杆风险高,交易要谨慎 声明:坛友发言和回复均为个人观点,不代表论坛立场。
若有侵权请联系fx3q@qq.com删除

快速回复 返回顶部 返回列表