发布网友 发布时间:2022-04-21 19:22
共3个回答
懂视网 时间:2022-04-22 00:46
当今 JavaScript 大行其道,各种应用对其依赖日深。web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学习和深入理解。所以,经常出现的情况是,很多做了多年 JS 开发的程序员对闭包、函数式编程、原型总是说不清道不明,即使使用了框架,其代码组织也非常糟糕。这都是对原生 JavaScript 语言特性理解不够的表现。要掌握好 JavaScript,首先一点是必须摒弃一些其他高级语言如 Java、C# 等类式面向对象思维的干扰,全面地从函数式语言的角度理解 JavaScript 原型式面向对象的特点。把握好这一点之后,才有可能进一步使用好这门语言。本文适合群体:使用过 JS 框架但对 JS 语言本质缺乏理解的程序员,具有 Java、C++ 等语言开发经验,准备学习并使用 JavaScript 的程序员,以及一直对 JavaScript 是否面向对象模棱两可,但希望知道的 JS 爱好者。
为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念:
以这三点做为依据,C++ 是半面向对象半面向过程语言,因为,虽然他实现了类的封装、继承和多态,但存在非对象性质的全局函数和变量。Java、C# 是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。但这里函数本身是一个过程,只是依附在某个类上。
然而,面向对象仅仅是一个概念或者编程思想而已,它不应该依赖于某个语言存在。比如 Java 采用面向对象思想构造其语言,它实现了类、继承、派生、多态、接口等机制。但是这些机制,只是实现面向对象编程的一种手段,而非必须。换言之,一门语言可以根据其自身特性选择合适的方式来实现面向对象。所以,由于大多数程序员首先学习或者使用的是类似 Java、C++ 等高级编译型语言(Java 虽然是半编译半解释,但一般做为编译型来讲解),因而先入为主地接受了“类”这个面向对象实现方式,从而在学习脚本语言的时候,习惯性地用类式面向对象语言中的概念来判断该语言是否是面向对象语言,或者是否具备面向对象特性。这也是阻碍程序员深入学习并掌握 JavaScript 的重要原因之一。
实际上,JavaScript 语言是通过一种叫做 原型(prototype)的方式来实现面向对象编程的。下面就来讨论 基于类的(class-based)面向对象和 基于原型的 (prototype-based) 面向对象这两种方式在构造客观世界的方式上的差别。
在基于类的面向对象方式中,对象(object)依靠类(class)来产生。而在基于原型的面向对象方式中,对象(object)则是依靠 构造器(constructor)利用 原型(prototype)构造出来的。举个客观世界的例子来说明二种方式认知的差异。例如工厂造一辆车,一方面,工人必须参照一张工程图纸,设计规定这辆车应该如何制造。这里的工程图纸就好比是语言中的 类 (class),而车就是按照这个 类(class)制造出来的;另一方面,工人和机器 ( 相当于 constructor) 利用各种零部件如发动机,轮胎,方向盘 ( 相当于 prototype 的各个属性 ) 将汽车构造出来。
事实上关于这两种方式谁更为彻底地表达了面向对象的思想,目前尚有争论。但笔者认为原型式面向对象是一种更为彻底的面向对象方式,理由如下:
首先,客观世界中的对象的产生都是其它实物对象构造的结果,而抽象的“图纸”是不能产生“汽车”的,也就是说,类是一个抽象概念而并非实体,而对象的产生是一个实体的产生;
其次,按照一切事物皆对象这个最基本的面向对象的法则来看,类 (class) 本身并不是一个对象,然而原型方式中的构造器 (constructor) 和原型 (prototype) 本身也是其他对象通过原型方式构造出来的对象。
再次,在类式面向对象语言中,对象的状态 (state) 由对象实例 (instance) 所持有,对象的行为方法 (method) 则由声明该对象的类所持有,并且只有对象的结构和方法能够被继承;而在原型式面向对象语言中,对象的行为、状态都属于对象本身,并且能够一起被继承(参考资源),这也更贴近客观实际。
最后,类式面向对象语言比如 Java,为了弥补无法使用面向过程语言中全局函数和变量的不便,允许在类中声明静态 (static) 属性和静态方法。而实际上,客观世界不存在所谓静态概念,因为一切事物皆对象!而在原型式面向对象语言中,除内建对象 (build-in object) 外,不允许全局对象、方法或者属性的存在,也没有静态概念。所有语言元素 (primitive) 必须依赖对象存在。但由于函数式语言的特点,语言元素所依赖的对象是随着运行时 (runtime) 上下文 (context) 变化而变化的,具体体现在 this 指针的变化。正是这种特点更贴近 “万物皆有所属,宇宙乃万物生存之根本”的自然观点。在 程序清单 1中 window 便类似与宇宙的概念。
在接受了面向对象存在一种叫做基于原型实现的方式的事实之后,下面我们就可以来深入探讨 ECMAScript 是如何依据这一方式构造自己的语言的。
ECMAScript 是一门彻底的面向对象的编程语言(参考资源),JavaScript 是其中的一个变种 (variant)。它提供了 6 种基本数据类型,即 Boolean、Number、String、Null、Undefined、Object。为了实现面向对象,ECMAScript设计出了一种非常成功的数据结构 - JSON(JavaScript Object Notation), 这一经典结构已经可以脱离语言而成为一种广泛应用的数据交互格式 (参考资源)。
应该说,具有基本数据类型和 JSON 构造语法的 ECMAScript 已经基本可以实现面向对象的编程了。开发者可以随意地用 字面式声明(literal notation)方式来构造一个对象,并对其不存在的属性直接赋值,或者用 delete 将属性删除 ( 注:JS 中的 delete 关键字用于删除对象属性,经常被误作为 C++ 中的 delete,而后者是用于释放不再使用的对象 ),如 程序清单 2。
var person = { name: “张三”, age: 26, gender: “男”, eat: function( stuff ) { alert( “我在吃” + stuff ); } }; person.height = 176; delete person[ “age” ];
在实际开发过程中,大部分初学者或者对 JS 应用没有太高要求的开发者也基本上只用到 ECMAScript 定义的这一部分内容,就能满足基本的开发需求。然而,这样的代码复用性非常弱,与其他实现了继承、派生、多态等等的类式面向对象的强类型语言比较起来显得有些干瘪,不能满足复杂的 JS 应用开发。所以 ECMAScript 引入原型来解决对象继承问题。
除了 字面式声明(literal notation)方式之外,ECMAScript 允许通过 构造器(constructor)创建对象。每个构造器实际上是一个 函数(function) 对象, 该函数对象含有一个“prototype”属性用于实现基于原型的继承(prototype-based inheritance)和共享属性(shared properties)。对象可以由“new 关键字 + 构造器调用”的方式来创建,如 程序清单 3:
// 构造器 Person 本身是一个函数对象 function Person() { // 此处可做一些初始化工作 } // 它有一个名叫 prototype 的属性 Person.prototype = { name: “张三”, age: 26, gender: “男”, eat: function( stuff ) { alert( “我在吃” + stuff ); } } // 使用 new 关键字构造对象 var p = new Person();
由于早期 JavaScript 的发明者为了使这门语言与大名鼎鼎的 Java 拉上关系 ( 虽然现在大家知道二者是雷锋和雷锋塔的关系 ),使用了 new 关键字来限定构造器调用并创建对象,以使其在语法上跟 Java 创建对象的方式看上去类似。但需要指出的是,这两门语言的 new含义毫无关系,因为其对象构造的机理完全不同。也正是因为这里语法上的类似,众多习惯了类式面向对象语言中对象创建方式的程序员,难以透彻理解 JS 对象原型构造的方式,因为他们总是不明白在 JS 语言中,为什么“函数名可以作为类名”的现象。而实质上,JS 这里仅仅是借用了关键字 new,仅此而已;换句话说,ECMAScript 完全可以用其它 非new 表达式来用调用构造器创建对象。
在 ECMAScript 中,每个由构造器创建的对象拥有一个指向构造器 prototype 属性值的 隐式引用(implicit reference),这个引用称之为 原型(prototype)。进一步,每个原型可以拥有指向自己原型的 隐式引用(即该原型的原型),如此下去,这就是所谓的 原型链(prototype chain) (参考资源)。在具体的语言实现中,每个对象都有一个 __proto__ 属性来实现对原型的 隐式引用。程序清单 4说明了这一点。
function Person( name ) { this.name = name; } var p = new Person(); // 对象的隐式引用指向了构造器的 prototype 属性,所以此处打印 true console.log( p.__proto__ === Person.prototype ); // 原型本身是一个 Object 对象,所以他的隐式引用指向了 // Object 构造器的 prototype 属性 , 故而打印 true console.log( Person.prototype.__proto__ === Object.prototype ); // 构造器 Person 本身是一个函数对象,所以此处打印 true console.log( Person.__proto__ === Function.prototype );
有了 原型链,便可以定义一种所谓的 属性隐藏机制,并通过这种机制实现继承。ECMAScript 规定,当要给某个对象的属性赋值时,解释器会查找该对象原型链中第一个含有该属性的对象(注:原型本身就是一个对象,那么原型链即为一组对象的链。对象的原型链中的第一个对象是该对象本身)进行赋值。反之,如果要获取某个对象属性的值,解释器自然是返回该对象原型链中首先具有该属性的对象属性值。图 1说名了这中隐藏机制:
在图 1 中,object1->prototype1->prototype2 构成了 对象 object1 的原型链,根据上述属性隐藏机制,可以清楚地看到 prototype1 对象中的 property4 属性和 prototype2 对象中的 property3 属性皆被隐藏。理解了原型链,那么将非常容易理解 JS 中基于原型的继承实现原理,程序清单 5 是利用原型链实现继承的简单例子。
// 声明 Animal 对象构造器 function Animal() { } // 将 Animal 的 prototype 属性指向一个对象, // 亦可直接理解为指定 Animal 对象的原型 Animal.prototype = { name: animal", weight: 0, eat: function() { alert( "Animal is eating!" ); } } // 声明 Mammal 对象构造器 function Mammal() { this.name = "mammal"; } // 指定 Mammal 对象的原型为一个 Animal 对象。 // 实际上此处便是在创建 Mammal 对象和 Animal 对象之间的原型链 Mammal.prototype = new Animal(); // 声明 Horse 对象构造器 function Horse( height, weight ) { this.name = "horse"; this.height = height; this.weight = weight; } // 将 Horse 对象的原型指定为一个 Mamal 对象,继续构建 Horse 与 Mammal 之间的原型链 Horse.prototype = new Mammal(); // 重新指定 eat 方法 , 此方法将覆盖从 Animal 原型继承过来的 eat 方法 Horse.prototype.eat = function() { alert( "Horse is eating grass!" ); } // 验证并理解原型链 var horse = new Horse( 100, 300 ); console.log( horse.__proto__ === Horse.prototype ); console.log( Horse.prototype.__proto__ === Mammal.prototype ); console.log( Mammal.prototype.__proto__ === Animal.prototype );
理解清单 5 中对象原型继承逻辑实现的关键在于 Horse.prototype = new Mammal() 和 Mammal.prototype = new Animal() 这两句代码。首先,等式右边的结果是构造出一个临时对象,然后将这个对象赋值给等式左边对象的 prototype 属性。也就是说将右边新建的对象作为左边对象的原型。读者可以将这两个等式替换到相应的程序清单 5 代码最后两行的等式中自行领悟。
从代码清单 5 可以看出,基于原型的继承方式,虽然实现了代码复用,但其行文松散且不够流畅,可阅读性差,不利于实现扩展和对源代码进行有效地组织管理。不得不承认,类式继承方式在语言实现上更具健壮性,且在构建可复用代码和组织架构程序方面具有明显的优势。这使得程序员们希望寻找到一种能够在 JavaScript 中以类式继承风格进行编码的方法途径。从抽象的角度来讲,既然类式继承和原型继承都是为实现面向对象而设计的,并且他们各自实现的载体语言在计算能力上是等价的 ( 因为图灵机的计算能力与 Lambda 演算的计算能力是等价的 ),那么能不能找到一种变换,使得原型式继承语言通过该变换实现具有类式继承编码的风格呢?
目前一些主流的 JS 框架都提供了这种转换机制,也即类式声明方法,比如 Dojo.declare()、Ext.entend() 等等。用户使用这些框架,可以轻易而友好地组织自己的 JS 代码。其实,在众多框架出现之前,JavaScript 大师 Douglas Crockford 最早利用三个函数对 Function 对象进行扩展,实现了这种变换,关于它的实现细节可以(参考资源)。此外还有由Dean Edwards实现的著名的 Base.js(参考资源)。值得一提的是,jQuery 之父 John Resig 在搏众家之长之后,用不到 30 行代码便实现了自己的Simple Inheritance。使用其提供的 extend 方法声明类非常简单。程序清单 6是使用了 Simple Inheritance库实现类的声明的例子。其中最后一句打印输出语句是对 Simple Inheritance实现类式继承的最好说明。
// 声明 Person 类 var Person = Class.extend( { _issleeping: true, init: function( name ) { this._name = name; }, isSleeping: function() { return this._issleeping; } } ); // 声明 Programmer 类,并继承 Person var Programmer = Person.extend( { init: function( name, issleeping ) { // 调用父类构造函数 this._super( name ); // 设置自己的状态 this._issleeping = issleeping; } } ); var person = new Person( "张三" ); var diors = new Programmer( "张江男", false ); // 打印 true console.log( person.isSleeping() ); // 打印 false console.log( diors.isSleeping() ); // 此处全为 true,故打印 true console.log( person instanceof Person && person instanceof Class && diors instanceof Programmer && diors instanceof Person && diors instanceof Class );
如果您已对原型、函数构造器、闭包和基于上下文的 this 有了充分的理解,那么理解 Simple Inheritance 的实现原理也并非相当困难。从本质上讲,var Person = Class.extend(...)该语句中,左边的 Person 实际上是获得了由 Class 调用 extend 方法返回的一个构造器,也即一个 function 对象的引用。顺着这个思路,我们继续介绍 Simple Inheritance 是如何做到这一点,进而实现了由原型继承方式到类式继承方式的转换的。图 2 是 Simple Inheritance 的源码及其附带注释。为了方便理解,用中文对代码逐行补充说明。
抛开代码第二部分,整体连贯地考察第一和第三部分会发现,extend 函数的根本目的就是要构造一个具有新原型属性的新构造器。我们不禁感叹 John Resig的大师手笔及其对 JS 语言本质把握的细腻程度。至于 John Resig是如何想到这样精妙的实现方法,感兴趣的读者可以阅读本文 (参考资源),其中有详细介绍关于最初设计 Simple Inheritance 的思维过程。
到此为止,如果您任然对 JavaScript 面向对象持怀疑态度,那么这个怀疑一定是,JavaScript 没有实现面向对象中的信息隐藏,即私有和公有。与其他类式面向对象那样显式地声明私有公有成员的方式不同,JavaScript 的信息隐藏就是靠闭包实现的。见 程序清单 7:
// 声明 User 构造器 function User( pwd ) { // 定义私有属性 var password = pwd; // 定义私有方法 function getPassword() { // 返回了闭包中的 password return password; } // 特权函数声明,用于该对象其他公有方法能通过该特权方法访问到私有成员 this.passwordService = function() { return getPassword(); } } // 公有成员声明 User.prototype.checkPassword = function( pwd ) { return this.passwordService() === pwd; }; // 验证隐藏性 var u = new User( "123456" ); // 打印 true console.log( u.checkPassword( "123456" ) ); // 打印 undefined console.log( u.password ); // 打印 true console.log( typeof u.gePassword === "undefined" );
JavaScript 必须依赖闭包实现信息隐藏,是由其函数式语言特性所决定的。本文不会对函数式语言和闭包这两个话题展开讨论,正如上文默认您理解 JavaScript 中基于上下文的 this 一样。关于 JavaScript 中实现信息隐藏,Douglas Crockford在《 Private members in JavaScript 》(参考资源)一文中有更权威和详细的介绍。
JavaScript 被认为是世界上最受误解的编程语言,因为它身披 c 语言家族的外衣,表现的却是 LISP 风格的函数式语言特性;没有类,却实也彻底实现了面向对象。要对这门语言有透彻的理解,就必须扒开其 c 语言的外衣,从新回到函数式编程的角度,同时摒弃原有类的面向对象概念去学习领悟它。随着近些年来 Web 应用的普及和 JS 语言自身的长足发展,特别是后台 JS 引擎的出现 ( 如基于 V8 的 NodeJS 等 ),可以预见,原来只是作为玩具编写页面效果的 JS 将获得更广阔发展天地。这样的发展趋势,也对 JS 程序员提出了更高要求。只有彻底领悟了这门语言,才有可能在大型的 JS 项目中发挥她的威力。
热心网友 时间:2022-04-21 21:54
很多股民朋友对于炒股就是炒预期都很清楚,炒股注重的是上市公司的业绩,但炒股除了需要关注公司的基本面外,另外需要了解技术面。只要谈到技术面,多数人对MACD指标都不陌生,却对KDJ的用法很陌生,而对想要做短线的朋友来讲,KDJ的重要性不在话下。所以今天,咱们就来学习学习KDJ指标到底是什么,以及,我们要怎么样利用这个技术指标来提升自己做短线操作的容错率。开始之前,不妨先领一波福利--机构精选的牛股榜单新鲜出炉,走过路过可别错过:【绝密】机构推荐的牛股名单泄露,限时速领!!!
一、KDJ是什么?
KDJ指标就是随机指标,构成的元素是三条分别被称为K线、D线和J线的曲线,通过看图,我们得出,K、D、J分别用不同的颜色线条来表示,所谓的K线是指快速确认线,D线就是指慢速主干线,而方向明暗线则为J线。K值和D值的浮动范围是0~100,而J值的波动范围则可以小于0或大于100,有更大的波动范围。KDJ的作用就是判断中短期行情走势。
二、KDJ有哪些实用技巧?
1、参数设为多少合适?
一般而论,KDJ指标的系统默认参数为(9,3,3),但是就是这样的参数设置,KDJ经常出现在日K线下波动的情况,许多投资者没有足够时间去思考,更别说有时间去跟上操作了。因此关于那些操作超短线的投资者,建议根据自己的需求来选择下面适合的参数:
(1)参数为(6,3,3):就在变动频率随之增高的情况下,更容易找到买点和卖点;
(2)参数为(18,3,3):不仅买卖信号更加稳定而且还能保持指标的灵敏度;
(3)参数为(24,3,3):更加适合那些中线投资者选择,还能够提高容错率。
2、如何利用KDJ操作个股?
用50来作分界线,我们也能根据KDJ三项数值的相对大小来判断此时多空两方的力量来比较一下,假如说K、D、J三个数值都大于50,不难看出多方的力量都很强势;假设这三个数值在50上下变化,则表示多空力量均衡;如果这三个数值都小于50的话,这就说空方力量还是很强。在操作上面进行划分了不同的区域:K、D、J这三值在20以下就会判定为超卖区,称为买入信号;80以上的就是超买区,是卖出信号;20-80之间为徘徊区,适合观望。
还可以看一下这几种形态:
(1)金叉和死叉:如果遇到K、D、J三个值都小于50,而且J线和K线也会一起向上突破D线时,也就是说KDJ形成金叉,那么当天就可以加仓,但是,如果说K、D、J三个值均大于50,且J线和K线跌破D线时,则表现为KDJ形成死叉,说清楚点就是当天需要逢高减仓,防范回调的风险。
从图中我们不难看出*圈为KDJ形成的金叉,因而当天适合迈入,如果到了红色圈的位置时,KDJ已经形成了明显的死叉,那么这个情况下,投资者需要降低仓位,警惕由于高位回调带来的损失。
(2)顶背离和底背离:当股票处于增长状态时,可相应的KDJ指标却显示的越发衰退时,则形成了KDJ顶背离的形态,这种情况投资者们就得降低仓位了,以防回调风险,大致形态下方图可见:
而如果股价处在一个下跌趋势时,股价不断创新低,但是要是对应的KDJ指标一顶比一顶高之时,这说明了KDJ底背离的形态已经形成,那这时投资者们是能逢低介入的,对个股的后期走势保持持续的关注,大致形态下方图可见:
总体看来,KDJ指标只是用来判断行情的一种技术手段,要想把个股的走势精确地判断,还要考量大盘走势、所处的板块及时事*等多方面因素。实在没有充足的时间去研究某只个股的朋友,不妨点击下面这个链接,输入自己想要了解的股票代码,进行深度分析【免费】测一测你的股票当前估值位置?
三、KDJ指标的优劣势
KDJ指标的有对股价变化情况判断灵敏的特点,可以依据它来短线操作。但因为该指标反应过快,发出买入或者卖出信号有时会过早,容易导致投资者操作错误。那如何才能找到完美买卖时机?纯人力技术分析还有用吗?试试点击下方链接,AI智能判断买卖时机,进场再也不犹豫:【AI辅助决策】买卖时机捕捉神器
应答时间:2021-08-27,最新业务变化以文中链接内展示的数据为准,请点击查看
热心网友 时间:2022-04-21 23:12
KDJ指标是研判行情经常使用的一种技术指标,它的优点是对价格的未来走向变动比较敏感,尤其在周线日线图中,往往能给出较为明确进出场时机,一般来说,黄金交叉意味着买进,死亡交叉意味着抛空。
但是任何指标都不是万能。从另一方面来讲,KDJ指标的反应敏感又是它不足的地方。黄金交叉的信号经常可能使投资者进货太早而被套牢,死亡交叉的信号使投资者出货太早而被轧空。这两种现象也就是我们常说的KDJ指标的低位钝化和高位钝化。认识KDJ指标的钝化现象对于波动剧烈的期货市场非常关键。
要正确使用KDJ指标,需要满足的条件是:期价在有一定幅度的箱形之中运动,在这情况下,按照低位黄金交叉买进,高位死亡交叉卖出,准确度相对高一些。
当KDJ指标发生钝化的时候,可以用如下方法来识别:
1、放*。
因为KDJ指标非常敏感,因此经常给出一些杂信,这些信号容易误导投资者,认为产生进货信号或出货信号,据此操作而失误。如果我们放大一级来确认这个信号的可靠性,将会有较好的效果。如在日K线图上产生KDJ指标的低位黄金交叉,可以把它放大到周线图上去看,如果在周线图上也是在低位产生黄金交叉,将认为这个信号可靠性强,可以大胆去操作。如果周线图上显示的是在下跌途中,那么日线图上的黄金交叉可靠性不强,有可能是主力的骗线手法,这时候可以采用观望的方法。
2、形态法。
由于KDJ指标的敏感,它给出的指标经常超前,因此可以通过观察 KDJ指标的形态来帮助找出正确的买点和卖点,KDJ指标在低位形成W底,三重底和头肩底形态时再进货;在较强的市场里,KDJ指标在高位形成M头和头肩顶时,出货的信号可靠性将加强。尤其应该注意的是KDJ与RSI一样经过震荡后形成的反压线准确性较高。
3、数浪法。
KDJ指标和数浪相结合,是一种非常有效的方法。在K线图上, 可以经常清晰地分辨上升形态的一浪,三浪,五浪。在K线图上,期价盘底结束,开始上升,往往在上升第一子浪时,KDJ指标即发出死亡交叉的出货信号,这时候,可以少考虑这个卖出信号,因为它很可能是一个错误信号或是一个骗线信号。当期价运行到第三子浪时,加大对抛空信号的重视程度,当期价运动到明显的第五子浪时,这时如KDJ指标给出卖出信号,将坚决出货。这时候 KDJ指标给出的信号通常将是非常准确的信号,当期价刚刚结束上升开始下跌时,在下跌的第一子浪,少考虑KDJ指标的买进信号,当期价下跌了第三子浪或第五子浪时,才考虑KDJ指标的买入信号,尤其是下跌五子浪后的KDJ指标给出的买进信号较准确。
4、趋势线法。
与MACD搭配使用,一般MACD大于零是强势市场,反之为弱势市场,所以在期价进入一个极强的市场或极弱的市场,期价会形成单边上升走势和单边下跌走势;在单边下跌走势中,要有效解决KDJ钝化问题,可以在K线图上加一条下降趋势线,在期价没有打破下跌趋势线前,KDJ发出的任何一次买入信号,都将不考虑,只有当期价打破下降趋势线后,再开始考虑KDJ指标的买入信号;在单边上升的走势中,市场走势极强,期价会经常再高位发出卖出信号,按此信号操作者将丢失一大段行情,也可以在日K线上加一条上升趋势线,在期价未打破上升趋势线前,不考虑KDJ指标给出的卖出信号,当期价一旦打破上升趋势线,KDJ给出的卖出信号,将坚决执行,决不手软。KDJ指标失灵的情况往往出现在极强的市场或者极弱的市场、单边上升行情和单边下跌行情之中。此时的KDJ必然发生高位钝化和低位钝化的情况,这时候还按照黄金交叉进货,死亡交叉出货,将会发生行情刚起动,KDJ 指标已在高位发出卖出信号,如果按信号操作,将丢掉一个主升段行情;行情刚下跌,KDJ在低位发出黄金交叉,如果进货将被套牢,而且价位损失将非常大,因为KDJ指标可以在低位钝化了再钝化,期价下跌不止,从而给投资者造成误区。