(A+B)!=(A+B) - страница 2

 
Renat Akhtyamov #:

на 2 не надо делить

делите на 2.0

Так уже пробовал: TP=Ev.L+(double)minhl/2.0; не помогает + разные варианты по типу, что г-н Себастьянов чуть выше посоветовал. Результаты идентичные.

 
Leonids Drics #:

Так уже пробовал: TP=Ev.L+(double)minhl/2.0; не помогает + разные варианты по типу, что г-н Себастьянов чуть выше посоветовал. Результаты идентичные.

пробуйте

double Ev.L = 1.05739;

double minhl = 0.0005;

double  TP=Ev.L+minhl/2.0;

Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2.0,5)," = ",DoubleToString(TP,5));

Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2.0,5)," = ",DoubleToString(Ev.L+minhl/2.0,5));

 
Anatolii Zainchkovskii #:
Попробуй получение значения в переменную Ev.L получать перед выражением TP=.....
Есть подозрение что в этой переменной происходит подмена значения пока выполняются функции приведения и принта.

Нет, подмены не происходит, когда я отправляют в ордер не ТР, а 

Ev.L+(double)minhl/2.0

то [Invalid stops]  и error 4756 исчезают.

 
Leonids Drics #:

Нет, подмены не происходит, когда я отправляют в ордер не ТР, а 

то [Invalid stops]  и error 4756 исчезают.

Объясню. Вы получилизначение и пошел работать код.
Сначала выражение TP=....
После идуд принты с вызовом функции приведения из дабл в стринг.
Так вот когда вы в последнем принте берёте значение Ev.L оно уже может быть другим, из-за того что пришёл новый тик.
Просто попробуйте получать значение для переменной Ev.L прямо перед расчетом TP .
 
TP=Ev.L+minhl/2;
Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2,5)," = ",DoubleToString(TP,5));
Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2,5)," = ",DoubleToString(Ev.L+(minhl/2),5));

печатает:
620 sell 1.05812 TP= 1.05739 + 0.00025 = 1.05814
620 sell 1.05812 TP= 1.05739 + 0.00025 = 1.05764
                        

Пробуйте 

 
Renat Akhtyamov #:

пробуйте

double Ev.L = 1.05739;

double minhl = 0.0005;

double  TP=Ev.L+minhl/2.0;

Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2.0,5)," = ",DoubleToString(TP,5));

Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2.0,5)," = ",DoubleToString(Ev.L+minhl/2.0,5));

                 TP=Ev.L+(double)minhl/2.0;
                  ccount=ccount+1;
                  Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2,5),
                  " = ",DoubleToString(TP,5));
                  Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(Ev.L,5)," + ",DoubleToString(minhl/2,5),
                  " = ",DoubleToString(Ev.L+minhl/2,5));
                 
                  double A=Ev.L;
                  double B=minhl/2.0;                  
                  TP=A+B;                  
                  Print("");
                  Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(A,5)," + ",DoubleToString(B,5),
                  " = ",DoubleToString(TP,5));
                  Print(ccount," sell ",DoubleToString(Bid,5)," TP= ", DoubleToString(A,5)," + ",DoubleToString(B,5),
                  " = ",DoubleToString(A+B,5));

GQ      0       16:29:56.691    Core 1  2023.03.01 02:02:28   1 sell 1.05733 TP= 1.05713 + 0.00025 = 0.00000
QE      0       16:29:56.691    Core 1  2023.03.01 02:02:28   1 sell 1.05733 TP= 1.05713 + 0.00025 = 1.05738
PI      0       16:29:56.691    Core 1  2023.03.01 02:02:28   
QS      0       16:29:56.691    Core 1  2023.03.01 02:02:28   1 sell 1.05733 TP= 1.05713 + 0.00025 = 1.05738
KG      0       16:29:56.691    Core 1  2023.03.01 02:02:28   1 sell 1.05733 TP= 1.05713 + 0.00025 = 1.05738

...

EN      0       16:29:56.691    Core 1  2023.03.02 12:02:11   13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.05704
JR      0       16:29:56.691    Core 1  2023.03.02 12:02:11   13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.06216
NE      0       16:29:56.691    Core 1  2023.03.02 12:02:11   
HL      0       16:29:56.691    Core 1  2023.03.02 12:02:11   13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.06216
HP      0       16:29:56.691    Core 1  2023.03.02 12:02:11   13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.06216

EK      0       16:30:27.219    Core 1  2023.03.28 09:45:32   2556 sell 1.08081 TP= 1.07133 + 0.00025 = 1.07158
IO      0       16:30:27.219    Core 1  2023.03.28 09:45:32   2556 sell 1.08081 TP= 1.07133 + 0.00025 = 1.07158
PP      0       16:30:27.219    Core 1  2023.03.28 09:45:32   
KI      0       16:30:27.219    Core 1  2023.03.28 09:45:32   2556 sell 1.08081 TP= 1.07133 + 0.00025 = 1.07158
OM      0       16:30:27.219    Core 1  2023.03.28 09:45:32   2556 sell 1.08081 TP= 1.07133 + 0.00025 = 1.07158



Оба варианта вместе. Предыдущий + по типу вашего через строчку. Какой диагноз, доктор? Почему в глобальную переменную ТП правильно суммируются  локальные А и Б, а глобальные - не всегда? 

 
Leonids Drics #:

Оба варианта вместе. Предыдущий + по типу вашего через строчку. Какой диагноз, доктор? Почему в глобальную переменную ТП правильно суммируются  локальные А и Б, а глобальные - не всегда? 

Говорил выше.
Скорее всего глобально TP умудряется посчитаться на новом тике пока идёт принтовка.
Если не хотите светить здесь весь код то у себя после расчёта TP  сделайте его принт. Возможно вы увидите в какой момент происходит изменение, которое и влияет на вашу разницу в принтах.
Просто вы должны понимать , что пока происходит принтование может прийти несколько новых тиков, а они вынуждают по-новой производить все расчёты.
 
Leonids Drics #:

Оба варианта вместе. Предыдущий + по типу вашего через строчку. Какой диагноз, доктор? Почему в глобальную переменную ТП правильно суммируются  локальные А и Б, а глобальные - не всегда? 

Тебе же сказали приведи весь код.
 
Еще вроде в терминал не все принты выводятся для скорости. Все принты можно найти в логах.
 
Leonids Drics #:

Оба варианта вместе. Предыдущий + по типу вашего через строчку. Какой диагноз, доктор? Почему в глобальную переменную ТП правильно суммируются  локальные А и Б, а глобальные - не всегда? 

вот это надо считать когда значения переменных участвующих в выражении уже есть/присвоены, то есть перед принтом

TP=Ev.L+(double)minhl/2.0;

т.к. при 

ccount==1;

их нет

судя по всему, плюсом, ошибка в логических условиях цикла

ошибка 4756 - это цена == 0.00000

либо применение в торговом запросе:

   MqlTradeRequest request;

   MqlTradeResult  result;

вместо

   //--- объявление и инициализация запроса и результата

   MqlTradeRequest request = {};

   MqlTradeResult  result  = {};

как раз вчера столкнулся с этим

а раньше прокатывало и то и сё ;)