11//+------------------------------------------------------------------+
22//| Chart Pattern Helper |
3- //| Copyright © 2013-2023 , EarnForex.com |
3+ //| Copyright © 2024 , EarnForex.com |
44//| https://www.earnforex.com/ |
55//+------------------------------------------------------------------+
6- #property copyright " Copyright © 2013-2023 , EarnForex"
6+ #property copyright " Copyright © 2024 , EarnForex"
77#property link " https://www.earnforex.com/metatrader-expert-advisors/ChartPatternHelper/"
8- #property version " 1.13 "
8+ #property version " 1.14 "
99
1010#property description " Uses graphic objects (horizontal/trend lines, channels) to enter trades."
1111#property description " Works in two modes:"
@@ -845,7 +845,7 @@ void AdjustUpperAndLowerOrders()
845845 {
846846 Output (" Skipping Modify Buy TP because open price is too close to Ask. FreezeLevel = " + DoubleToString (FreezeLevel , _Digits ) + " OpenPrice = " + DoubleToString (PositionGetDouble (POSITION_PRICE_OPEN ), 8 ) + " Ask = " + DoubleToString (Ask , _Digits ));
847847 }
848- else if ((NormalizeDouble (PositionGetDouble (POSITION_TP ), _Digits ) != NormalizeDouble ( UpperTP , _Digits ) ) && (UpperTP != 0 ))
848+ else if ((MathAbs (PositionGetDouble (POSITION_TP ) - UpperTP ) > _Point / 2 ) && (UpperTP != 0 ))
849849 {
850850 if (!Trade .PositionModify (_Symbol , PositionGetDouble (POSITION_SL ), UpperTP ))
851851 {
@@ -889,7 +889,7 @@ void AdjustUpperAndLowerOrders()
889889 {
890890 Output (" Skipping Modify Sell TP because open price is too close to Bid. FreezeLevel = " + DoubleToString (FreezeLevel , _Digits ) + " OpenPrice = " + DoubleToString (PositionGetDouble (POSITION_PRICE_OPEN ), 8 ) + " Bid = " + DoubleToString (Bid , _Digits ));
891891 }
892- else if ((NormalizeDouble (PositionGetDouble (POSITION_TP ), _Digits ) != LowerTP ) && (NormalizeDouble (LowerTP , _Digits ) != 0 ))
892+ else if ((MathAbs (PositionGetDouble (POSITION_TP ) - LowerTP ) > _Point / 2 ) && (NormalizeDouble (LowerTP , _Digits ) != 0 ))
893893 {
894894 if (!Trade .PositionModify (_Symbol , PositionGetDouble (POSITION_SL ), LowerTP ))
895895 {
@@ -917,7 +917,7 @@ void AdjustUpperAndLowerOrders()
917917 // Delete existing pending order
918918 if ((HaveBuy ) || ((HaveSell ) && (OneCancelsOther )) || (!UseUpper )) Trade .OrderDelete (ticket );
919919 // If volume needs to be updated - delete and recreate order with new volume. Also check if EA will be able to create new pending order at current price.
920- else if ((UpdatePendingVolume ) && (OrderGetDouble (ORDER_VOLUME_CURRENT ) != NewVolume ))
920+ else if ((UpdatePendingVolume ) && (MathAbs ( OrderGetDouble (ORDER_VOLUME_CURRENT ) - NewVolume ) > LotStep / 2 ))
921921 {
922922 if ((UpperEntry - Ask > StopLevel ) || (Ask - UpperEntry > StopLevel )) // Order can be re-created
923923 {
@@ -965,7 +965,7 @@ void AdjustUpperAndLowerOrders()
965965 continue ;
966966 }
967967 // Otherwise, just update what needs to be updated.
968- else if ((NormalizeDouble (OrderGetDouble (ORDER_PRICE_OPEN ), _Digits ) != NormalizeDouble ( UpperEntry , _Digits )) || (NormalizeDouble (OrderGetDouble (ORDER_SL ), _Digits ) != NormalizeDouble ( UpperSL , _Digits )) || (NormalizeDouble (OrderGetDouble (ORDER_TP ), _Digits ) != NormalizeDouble ( UpperTP , _Digits ) ))
968+ else if ((MathAbs (OrderGetDouble (ORDER_PRICE_OPEN ) - UpperEntry ) > _Point / 2 ) || (MathAbs (OrderGetDouble (ORDER_SL ) - UpperSL ) > _Point / 2 ) || (MathAbs (OrderGetDouble (ORDER_TP ) - UpperTP ) > _Point / 2 ))
969969 {
970970 // Avoid error 130 based on entry.
971971 if (UpperEntry - Ask > StopLevel ) // Current price below entry
@@ -976,7 +976,7 @@ void AdjustUpperAndLowerOrders()
976976 {
977977 order_type_string = " Limit" ;
978978 }
979- else if (NormalizeDouble (OrderGetDouble (ORDER_PRICE_OPEN ), _Digits ) != NormalizeDouble ( LowerEntry , _Digits ) ) continue ;
979+ else if (MathAbs (OrderGetDouble (ORDER_PRICE_OPEN ) - UpperEntry ) > _Point / 2 ) continue ;
980980 // Avoid error 130 based on stop-loss.
981981 if (UpperEntry - UpperSL <= StopLevel )
982982 {
@@ -1016,7 +1016,7 @@ void AdjustUpperAndLowerOrders()
10161016 // Delete existing pending order.
10171017 if (((HaveBuy ) && (OneCancelsOther )) || (HaveSell ) || (!UseLower )) Trade .OrderDelete (ticket );
10181018 // If volume needs to be updated - delete and recreate order with new volume. Also check if EA will be able to create new pending order at current price.
1019- else if ((UpdatePendingVolume ) && (OrderGetDouble (ORDER_VOLUME_CURRENT ) != NewVolume ) && (Bid - LowerEntry > StopLevel ))
1019+ else if ((UpdatePendingVolume ) && (MathAbs ( OrderGetDouble (ORDER_VOLUME_CURRENT ) - NewVolume ) > LotStep / 2 ) && (Bid - LowerEntry > StopLevel ))
10201020 {
10211021 if ((Bid - LowerEntry > StopLevel ) || (LowerEntry - Bid > StopLevel )) // Order can be re-created
10221022 {
@@ -1062,8 +1062,8 @@ void AdjustUpperAndLowerOrders()
10621062 }
10631063 continue ;
10641064 }
1065- // Otherwise just update what needs to be updated
1066- else if ((NormalizeDouble (OrderGetDouble (ORDER_PRICE_OPEN ), _Digits ) != NormalizeDouble ( LowerEntry , _Digits )) || (NormalizeDouble (OrderGetDouble (ORDER_SL ), _Digits ) != NormalizeDouble ( LowerSL , _Digits )) || (NormalizeDouble (OrderGetDouble (ORDER_TP ), _Digits ) != NormalizeDouble ( LowerTP , _Digits ) ))
1065+ // Otherwise, just update what needs to be updated
1066+ else if ((MathAbs (OrderGetDouble (ORDER_PRICE_OPEN ) - LowerEntry ) > _Point / 2 ) || (MathAbs (OrderGetDouble (ORDER_SL ) - LowerSL ) > _Point / 2 ) || (MathAbs (OrderGetDouble (ORDER_TP ) - LowerTP ) > _Point / 2 ))
10671067 {
10681068 // Avoid error 130 based on entry.
10691069 if (Bid - LowerEntry > StopLevel ) // Current price above entry
@@ -1074,7 +1074,7 @@ void AdjustUpperAndLowerOrders()
10741074 {
10751075 order_type_string = " Limit" ;
10761076 }
1077- else if (NormalizeDouble (OrderGetDouble (ORDER_PRICE_OPEN ), _Digits ) != NormalizeDouble ( LowerEntry , _Digits ) ) continue ;
1077+ else if (MathAbs (OrderGetDouble (ORDER_PRICE_OPEN ) - LowerEntry ) > _Point / 2 ) continue ;
10781078 // Avoid error 130 based on stop-loss.
10791079 if (LowerSL - LowerEntry <= StopLevel )
10801080 {
0 commit comments