Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
29.04.2025, 18:28:18
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Непонятное поведение статичной переменной « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Непонятное поведение статичной переменной  (Прочитано 3883 раз)
qpile
Newbie
*
Сообщений: 48


Просмотр профиля Email
« : 21.10.2011, 17:27:00 »

Здравствуйте!Создаю глобальную переменную
Code: [Select]
static tradeEnable=1;Затем в функции CALC пишу следующее


Code: [Select]
    if (curPos==0)
    {
      signal::alert(as_string(tradeEnable));
       if (close[0]>enterPriceLong&&exitStopCountLong<=enterAfterStopLong&&tradeEnable==1)
       { 

       enterTrade=0;


       }
Почему первое сообщение, которое вижу содержит сразу НОЛЬ, а не единицу. Пробовал, что со static, что с VAR. Результат один и тот же
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #1 : 24.10.2011, 14:33:44 »

Приведите код целиком. По этому фрагменту невозможно что-либо сказать.
Записан
K.Vved
Newbie
*
Сообщений: 7


Просмотр профиля Email
« Ответ #2 : 21.12.2011, 22:48:49 »

Calc() рассчитывается на исторических данных, еще до прихода первого тика!
Возможно при расчете истории if выполнился и присвоил переменной ноль. А сообщения появляются только на тиках... Я бы обошел это так:

static enterTrade; // твоя переменная
static InpFlOrd=0; // Флаг первого вхождения для твоей переменной
.....
function onNewCandle()
{....
......
if(InpFlOrd==0)//выполняется один раз после просчета истории на первой свечке
   {
      enterTrade=1;;
      InpFlOrd=1;
   }
...

function calc(){
...
if(InpFlOrd==1)//теперь твой if защищен от расчета на исторических данных, т.к. до прихода первого тика InpFlOrd=0
{
А внутри уже твой if...
 }
Не очень красиво, но все же работает...
Записан
Shubert
Full Member
***
Сообщений: 109



Просмотр профиля Email
« Ответ #3 : 22.12.2011, 12:45:15 »

Добрый день!
Calc() рассчитывается на исторических данных, еще до прихода первого тика!

Вы не поверите ;) , и функция onNewCandle() также вызывается при обработки исторических данных, еще до прихода первого тика. Для обхода действий во время обработки исторических данных разработчиками были введены:
  • onHistoryCalculated() - обработчик завершения обработки исторических данных;
  • isHistoryCalculated() - функция статуса обработки исторических данных;

qpile
Правильно условие будет писать так и таком порядке:

Code: [Select]
      if (tradeEnable && close>enterPriceLong && exitStopCountLong<=enterAfterStopLong)
Поскольку при tradeEnable равном 0 остальное выражение в if не будет рассчитываться, что ускорит работу скрипта.
« Последнее редактирование: 22.12.2011, 13:03:49 от Shubert » Записан
Страниц: [1] Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Непонятное поведение статичной переменной « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!