НЕ РАБОТАЕТ КАК НАДО

Страницы: 1
RSS
НЕ РАБОТАЕТ КАК НАДО, НЕ РАБОТАЕТ КАК НАДО
 
ГДЕ ЗДЕСЬ ОШИБКА ? ПЫТАЮСЬ ВЗЯТЬ ЗНАЧЕНИЕ ПРЕДЫДУЩЕЙ СВЕЧИ ВСЕ РОВНО ПОЛУЧАЕТСЯ ТЕКУЩАЯ СВЕЧА А НЕ ПРЕДЫДУЩАЯ


PORTFOLIO_EX робокоп;
DESCRIPTION робокоп;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
USE_CASE_SENSITIVE_CONSTANTS;

PROGRAM

NEW_GLOBAL("CANDLE_OLD"," ") 'предыдущая свеча

FLAG=0  ' флаг новой свечи

X_=GET_VALUE(GET_DATETIME (),"DATETIME")
Date=SUBSTR (X_,6,4) & SUBSTR (X_, 3,2) & SUBSTR (X_, 0,2)
Time=SUBSTR (X_,11,2) & SUBSTR (X_, 14,2) & SUBSTR (X_, 17,2)

CANDLE = (GET_CANDLE_EX ("RIM6", Date, Time)
LINES = GET_VALUE(CANDLE,"LINES")
LINE = GET_COLLECTION_ITEM(LINES,0)
OPEN = GET_VALUE(LINE,"OPEN")+0
HIGH = GET_VALUE(LINE,"HIGH")+0
LOW = GET_VALUE(LINE,"LOW")+0  
CLOSE = GET_VALUE(LINE,"CLOSE")+0

IF (GET_VALUE (CANDLE,"TIME")-GET_VALUE (CANDLE_OLD,"TIME") <>0)  'свеча новая
FLAG=1     ' флаг равен 1 в момент появления новой свечи на графике
END IF

OUTPUT = CREATE_MAP()
OUTPUT = SET_VALUE(OUTPUT,"DATE",DATE)
OUTPUT = SET_VALUE(OUTPUT,"TIME",TIME)
OUTPUT = SET_VALUE(OUTPUT,"OPEN",OPEN)
OUTPUT = SET_VALUE(OUTPUT,"HIGH",HIGH)
OUTPUT = SET_VALUE(OUTPUT,"LOW",LOW)
OUTPUT = SET_VALUE(OUTPUT,"CLOSE",CLOSE)



DELETE_ALL_ITEMS() 'ФУНКЦИЯ УДАЛЕНИЯ СТАРЫХ ДАННЫХ ИЗ ТАБЛИЦЫ
ADD_ITEM(1,OUTPUT)

IF (FLAG=1)  'запоминаем новую свечу
CANDLE_OLD= CANDLE
END IF

END_PROGRAM

PARAMETER DATE;
PARAMETER_TITLE ДАТА;
PARAMETER_DESCRIPTION ДАТА;
PARAMETER_TYPE STRING(30);
END

PARAMETER TIME;
PARAMETER_TITLE ВРЕМЯ;
PARAMETER_DESCRIPTION ВРЕМЯ;
PARAMETER_TYPE STRING(30);
END

PARAMETER OPEN;
PARAMETER_TITLE ЦЕНА ОТК.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END

PARAMETER HIGH;
PARAMETER_TITLE ЦЕНА МАКС.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END

PARAMETER LOW;
PARAMETER_TITLE ЦЕНА МИН.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END


PARAMETER CLOSE;
PARAMETER_TITLE ЗАКР.;
PARAMETER_DESCRIPTION CLOSE;
PARAMETER_TYPE STRING(30);
END


END_PORTFOLIO_EX
 
Цитата
дмитрий б написал:
ПЫТАЮСЬ ВЗЯТЬ ЗНАЧЕНИЕ ПРЕДЫДУЩЕЙ СВЕЧИ ВСЕ РОВНО ПОЛУЧАЕТСЯ ТЕКУЩАЯ СВЕЧА А НЕ ПРЕДЫДУЩАЯ

Здравствуйте,
По присланному коду не видно чтобы была попытка взять предыдущую свечу.
Видно что Вы ее сохраняете в массив CANDLE_OLD
однако больше с этим массивом Вы ничего не делаете.
 
Пожалуйста подскажите что надо делать дальше потому что я в программирование совсем недавно подскажите и если не трудно надпишите код желательно с прояснениями если не трудно заранее спасибо большое
 
Цитата
дмитрий б написал:
Пожалуйста подскажите что надо делать дальше потому что я в программирование совсем недавно подскажите и если не трудно надпишите код желательно с прояснениями если не трудно заранее спасибо большое

У Вас есть массив CANDLE_OLD, Вам остается только что-то с ним сделать, например вывести в таблицу.
Как вывести в таблицу можно посмотреть на примере аналогичного массива CANDLE
Вам остается просто заменить одно на другое.
 
CANDLE = (GET_CANDLE_EX ("RIM6", Date, Time)
LINES = GET_VALUE(CANDLE,"LINES")
LINE = GET_COLLECTION_ITEM(LINES,0)
OPEN = GET_VALUE(LINE,"OPEN")+0
HIGH = GET_VALUE(LINE,"HIGH")+0
LOW = GET_VALUE(LINE,"LOW")+0
CLOSE = GET_VALUE(LINE,"CLOSE")+0
я правильно понимаю CANDLE заменить CANDLE_OLD
 
Вам надо заменить только в одной строке
LINES = GET_VALUE(CANDLE,"LINES")
 
Спасибо большое! А если мне надо будет 2 свечи текущую и вторую как быть
 
Цитата
дмитрий б написал:
Спасибо большое! А если мне надо будет 2 свечи текущую и вторую как быть
выводить обе в таблицу.
в таком случае надо не менять, а копировать строки
 
Сергей! Я эти значения вывожу в таблицу чтоб узнать работает это или нет а в дальнейшем я эти значения буду использовать в коде . Подскажите а могу ли я эти значения приобразовать в переменные примеру bar1 bar2 также с максимум и минимум этих баров как это лучше сделать
 
Цитата
дмитрий б написал:
Я эти значения вывожу в таблицу чтоб узнать работает это или нет а в дальнейшем я эти значения буду использовать в коде .
Если требуется просто узнать работает или нет, то можно запустить отладчик (в контекстном меню таблицы)
Цитата
дмитрий б написал:
Подскажите а могу ли я эти значения приобразовать в переменные примеру bar1 bar2 также с максимум и минимум этих баров как это лучше сделать
Вопрос не совсем понятен, зачем преобразовывать, если у Вас и так есть массивы CANDLE и CANDLE_OLD из которых Вы уже можете взять максимум и минимум.
 
ПОМЕНЯЛ LINES = GET_VALUE(CANDLE,"LINES") НА LINES = GET_VALUE(CANDLE_OLD,"LINES") ВСЕ РАВНО РАБОТАЕТ ПО СТАРОМУ ПОКАЗЫВАЕТ ТЕКУЩУЮ СВЕЧУ А НЕ ПРЕДЫДУЩУЮ. ЧТО ДЕЛАТЬ?
 
Проблема в том что Вы запоминаете значение CANDLE_OLD= CANDLE в момент когда свечка CANDLE только только появилась и еще не успела сформироваться.
То есть данная логика приводит к тому что Вы будете видеть не текущую свечку, а момент создания этой свечки.
Чтобы решить задачу, Вам нужно переделать логику так, чтобы в момент срабатывания условия "свеча новая" в CANDLE_OLD попадало значение CANDLE которое было до срабатывания условия.

Для этого достаточно перенести ADD_ITEM в условие IF (FLAG=1), а CANDLE_OLD=CANDLE вынести после этого условия.
 
ПРОДОЛЖЕНИЕ СООБЩЕНИЯ . КОГДА Я ПОМЕНЯЛ

CANDLE = (GET_CANDLE_EX ("RIM6", Date, Time)
LINES = GET_VALUE(CANDLE_OLD,"LINES")
LINE = GET_COLLECTION_ITEM(LINES,0)
OPEN = GET_VALUE(LINE,"OPEN")+0
HIGH = GET_VALUE(LINE,"HIGH")+0
LOW = GET_VALUE(LINE,"LOW")+0
CLOSE = GET_VALUE(LINE,"CLOSE")+0

ПОРТФЕЛЬ ВСЕ РАВНО ПОКАЗЫВАЛ ЗНАЧЕНИЯ ТЕКУЩЕЙ СВЕЧИ НАСКОЛЬКО СЕЙЧАС Я ВАС ПОНЕЛ ДЕЛО ЕЩЁ В ДРУГОЙ ФУНКЦИИ
ВОТ ЭТОЙ         IF (FLAG=1) 'запоминаем новую свечу  
                        CANDLE_OLD= CANDLE
                         END IF
 
Дело не в функции а в логике скрипта, которая работает не так как Вам хочется.
Вам нужно изменить логику так как написано выше.
 
Я ПРАВЕЛЬНО ПОНЕЛ ВАС

NEW_GLOBAL("CANDLE_OLD"," ") 'предыдущая свеча

FLAG=0 ' флаг новой свечи

X_=GET_VALUE(GET_DATETIME (),"DATETIME")
Date=SUBSTR (X_,6,4) & SUBSTR (X_, 3,2) & SUBSTR (X_, 0,2)
Time=SUBSTR (X_,11,2) & SUBSTR (X_, 14,2) & SUBSTR (X_, 17,2)

CANDLE = (GET_CANDLE_EX ("SBER", Date, Time)
LINES = GET_VALUE(CANDLE_OLD,"LINES")
LINE = GET_COLLECTION_ITEM(LINES,0)
OPEN = GET_VALUE(LINE,"OPEN")+0
HIGH = GET_VALUE(LINE,"HIGH")+0
LOW = GET_VALUE(LINE,"LOW")+0
CLOSE = GET_VALUE(LINE,"CLOSE")+0

IF (GET_VALUE (CANDLE,"TIME")-GET_VALUE (CANDLE_OLD,"TIME") <>0) 'свеча новая
FLAG=1 ' флаг равен 1 в момент появления новой свечи на графике
END IF

IF (FLAG=1) 'запоминаем новую свечу  


OUTPUT = CREATE_MAP()
OUTPUT = SET_VALUE(OUTPUT,"DATE",DATE)
OUTPUT = SET_VALUE(OUTPUT,"TIME",TIME)
OUTPUT = SET_VALUE(OUTPUT,"OPEN",OPEN)
OUTPUT = SET_VALUE(OUTPUT,"HIGH",HIGH)
OUTPUT = SET_VALUE(OUTPUT,"LOW",LOW)
OUTPUT = SET_VALUE(OUTPUT,"CLOSE",CLOSE)



DELETE_ALL_ITEMS() 'ФУНКЦИЯ УДАЛЕНИЯ СТАРЫХ ДАННЫХ ИЗ ТАБЛИЦЫ
ADD_ITEM(1,OUTPUT)

CANDLE_OLD= CANDLE
END IF

END_PROGRAM
 
нет не правильно
Цитата
Sergey Gorokhov написал:
а CANDLE_OLD=CANDLE вынести после этого условия.
 
NEW_GLOBAL("CANDLE_OLD"," ") 'предыдущая свеча

FLAG=0 ' флаг новой свечи

X_=GET_VALUE(GET_DATETIME (),"DATETIME")
Date=SUBSTR (X_,6,4) & SUBSTR (X_, 3,2) & SUBSTR (X_, 0,2)
Time=SUBSTR (X_,11,2) & SUBSTR (X_, 14,2) & SUBSTR (X_, 17,2)

CANDLE = (GET_CANDLE_EX ("SBER", Date, Time)
LINES = GET_VALUE(CANDLE_OLD,"LINES")
LINE = GET_COLLECTION_ITEM(LINES,0)
OPEN = GET_VALUE(LINE,"OPEN")+0
HIGH = GET_VALUE(LINE,"HIGH")+0
LOW = GET_VALUE(LINE,"LOW")+0
CLOSE = GET_VALUE(LINE,"CLOSE")+0

IF (GET_VALUE (CANDLE,"TIME")-GET_VALUE (CANDLE_OLD,"TIME") <>0) 'свеча новая
FLAG=1 ' флаг равен 1 в момент появления новой свечи на графике
END IF

IF (FLAG=1) 'запоминаем новую свечу

OUTPUT = CREATE_MAP()
OUTPUT = SET_VALUE(OUTPUT,"DATE",DATE)
OUTPUT = SET_VALUE(OUTPUT,"TIME",TIME)
OUTPUT = SET_VALUE(OUTPUT,"OPEN",OPEN)
OUTPUT = SET_VALUE(OUTPUT,"HIGH",HIGH)
OUTPUT = SET_VALUE(OUTPUT,"LOW",LOW)
OUTPUT = SET_VALUE(OUTPUT,"CLOSE",CLOSE)

DELETE_ALL_ITEMS() 'ФУНКЦИЯ УДАЛЕНИЯ СТАРЫХ ДАННЫХ ИЗ ТАБЛИЦЫ
ADD_ITEM(1,OUTPUT)

END IF

CANDLE_OLD= CANDLE


END_PROGRAM
 
PORTFOLIO_EX робокоп;
DESCRIPTION робокоп;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
USE_CASE_SENSITIVE_CONSTANTS;

PROGRAM

NEW_GLOBAL("CANDLE_1",0) 'текущая свеча
NEW_GLOBAL("CANDLE_2",0) 'предыдущая свеча

X_=GET_VALUE(GET_DATETIME (),"DATETIME")
Date=SUBSTR (X_,6,4) & SUBSTR (X_, 3,2) & SUBSTR (X_, 0,2)
Time=SUBSTR (X_,11,2) & SUBSTR (X_, 14,2) & SUBSTR (X_, 17,2)

CANDLE = (GET_CANDLE_EX ("RIM6", Date, Time)
LINES = GET_VALUE(CANDLE,"LINES")
LINE = GET_COLLECTION_ITEM(LINES,0)
OPEN = GET_VALUE(LINE,"OPEN")+0
HIGH = GET_VALUE(LINE,"HIGH")+0
LOW = GET_VALUE(LINE,"LOW")+0
CLOSE = GET_VALUE(LINE,"CLOSE")+0

OUTPUT = CREATE_MAP()
OUTPUT = SET_VALUE(OUTPUT,"DATE",DATE)
OUTPUT = SET_VALUE(OUTPUT,"TIME",TIME)
OUTPUT = SET_VALUE(OUTPUT,"OPEN",OPEN)
OUTPUT = SET_VALUE(OUTPUT,"HIGH",HIGH)
OUTPUT = SET_VALUE(OUTPUT,"LOW",LOW)
OUTPUT = SET_VALUE(OUTPUT,"CLOSE",CLOSE)

DELETE_ALL_ITEMS() 'ФУНКЦИЯ УДАЛЕНИЯ СТАРЫХ ДАННЫХ ИЗ ТАБЛИЦЫ
ADD_ITEM(1,OUTPUT)

IF((CANDLE_1+0=0) or ( GET_VALUE (CANDLE,"TIME")-GET_VALUE (CANDLE_1,"TIME") <>0) )
CANDLE_2= CANDLE_1
CANDLE_1= CANDLE
END IF

END_PROGRAM

PARAMETER DATE;
PARAMETER_TITLE ДАТА;
PARAMETER_DESCRIPTION ДАТА;
PARAMETER_TYPE STRING(30);
END

PARAMETER TIME;
PARAMETER_TITLE ВРЕМЯ;
PARAMETER_DESCRIPTION ВРЕМЯ;
PARAMETER_TYPE STRING(30);
END

PARAMETER OPEN;
PARAMETER_TITLE ЦЕНА ОТК.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END
-------------------------------  
если надо в таблице видеть предыдущую, то отобразите CANDLE_2
вообще-то все делается гораздо проще (но писать программу за вас не буду)
----------------------------------
надо вычислить время предыдущей свечи,
вычитая интервал и времени текущей свечи и снова прочитать с этим временем
При этом надо учесть, что для нахождения последней свечи предыдущего дня надо уменьшить день.
Но при этом надо учесть, что предыдущий день это не всегда текущий день минус 1.
----------------------------
 
пардон, опечатка
надо вычислить время предыдущей свечи,  
вычитая интервал из времени текущей свечи и снова прочитать с новым значением времени
 
чтобы отображать предыдущую Ваша программа запишется так
Код
PORTFOLIO_EX робокоп;
DESCRIPTION робокоп;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
USE_CASE_SENSITIVE_CONSTANTS;

PROGRAM

PORTFOLIO_EX робокоп;
DESCRIPTION робокоп;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
USE_CASE_SENSITIVE_CONSTANTS;

PROGRAM

NEW_GLOBAL("CANDLE_1",0) 'текущая свеча
NEW_GLOBAL("CANDLE_2",0) 'предыдущая свеча

X_=GET_VALUE(GET_DATETIME (),"DATETIME")
Date=SUBSTR (X_,6,4) & SUBSTR (X_, 3,2) & SUBSTR (X_, 0,2)
Time=SUBSTR (X_,11,2) & SUBSTR (X_, 14,2) & SUBSTR (X_, 17,2)

CANDLE = (GET_CANDLE_EX ("RIM6", Date, Time)
IF((CANDLE_1+0=0) or ( GET_VALUE (CANDLE,"TIME")-GET_VALUE (CANDLE_1,"TIME") <>0) )
CANDLE_2= CANDLE_1
CANDLE_1= CANDLE

LINES = GET_VALUE(CANDLE_2,"LINES")
LINE = GET_COLLECTION_ITEM(LINES,0)
OPEN = GET_VALUE(LINE,"OPEN")+0
HIGH = GET_VALUE(LINE,"HIGH")+0
LOW = GET_VALUE(LINE,"LOW")+0
CLOSE = GET_VALUE(LINE,"CLOSE")+0

OUTPUT = CREATE_MAP()
OUTPUT = SET_VALUE(OUTPUT,"DATE",DATE)
OUTPUT = SET_VALUE(OUTPUT,"TIME",TIME)
OUTPUT = SET_VALUE(OUTPUT,"OPEN",OPEN)
OUTPUT = SET_VALUE(OUTPUT,"HIGH",HIGH)
OUTPUT = SET_VALUE(OUTPUT,"LOW",LOW)
OUTPUT = SET_VALUE(OUTPUT,"CLOSE",CLOSE)

DELETE_ALL_ITEMS() 'ФУНКЦИЯ УДАЛЕНИЯ СТАРЫХ ДАННЫХ ИЗ ТАБЛИЦЫ
ADD_ITEM(1,OUTPUT)
END IF

END_PROGRAM

PARAMETER DATE;
PARAMETER_TITLE ДАТА;
PARAMETER_DESCRIPTION ДАТА;
PARAMETER_TYPE STRING(30);
END

PARAMETER TIME;
PARAMETER_TITLE ВРЕМЯ;
PARAMETER_DESCRIPTION ВРЕМЯ;
PARAMETER_TYPE STRING(30);
END

PARAMETER OPEN;
PARAMETER_TITLE ЦЕНА ОТК.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END

PARAMETER HIGH;
PARAMETER_TITLE ЦЕНА МАКС.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END

PARAMETER LOW;
PARAMETER_TITLE ЦЕНА МИН.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END


PARAMETER CLOSE;
PARAMETER_TITLE ЗАКР.;
PARAMETER_DESCRIPTION CLOSE;
PARAMETER_TYPE STRING(30);
END

END_PORTFOLIO_EX

PARAMETER HIGH;
PARAMETER_TITLE ЦЕНА МАКС.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END

PARAMETER LOW;
PARAMETER_TITLE ЦЕНА МИН.;
PARAMETER_DESCRIPTION ЦЕНА ;
PARAMETER_TYPE STRING(30);
END


PARAMETER CLOSE;
PARAMETER_TITLE ЗАКР.;
PARAMETER_DESCRIPTION CLOSE;
PARAMETER_TYPE STRING(30);
END

END_PORTFOLIO_EX
Страницы: 1
Читают тему
Наверх