PARAMETER CLOSE; PARAMETER_TITLE ЗАКР.; PARAMETER_DESCRIPTION CLOSE; PARAMETER_TYPE STRING(30); END
END_PORTFOLIO_EX
Пользователь
Сообщений: Регистрация: 23.01.2015
25.04.2016 21:06:01
Цитата
дмитрий б написал: ПЫТАЮСЬ ВЗЯТЬ ЗНАЧЕНИЕ ПРЕДЫДУЩЕЙ СВЕЧИ ВСЕ РОВНО ПОЛУЧАЕТСЯ ТЕКУЩАЯ СВЕЧА А НЕ ПРЕДЫДУЩАЯ
Здравствуйте, По присланному коду не видно чтобы была попытка взять предыдущую свечу. Видно что Вы ее сохраняете в массив CANDLE_OLD однако больше с этим массивом Вы ничего не делаете.
Пользователь
Сообщений: Регистрация: 28.02.2016
25.04.2016 21:45:44
Пожалуйста подскажите что надо делать дальше потому что я в программирование совсем недавно подскажите и если не трудно надпишите код желательно с прояснениями если не трудно заранее спасибо большое
Пользователь
Сообщений: Регистрация: 23.01.2015
25.04.2016 21:56:33
Цитата
дмитрий б написал: Пожалуйста подскажите что надо делать дальше потому что я в программирование совсем недавно подскажите и если не трудно надпишите код желательно с прояснениями если не трудно заранее спасибо большое
У Вас есть массив CANDLE_OLD, Вам остается только что-то с ним сделать, например вывести в таблицу. Как вывести в таблицу можно посмотреть на примере аналогичного массива CANDLE Вам остается просто заменить одно на другое.
Пользователь
Сообщений: Регистрация: 28.02.2016
25.04.2016 22:36:25
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
Пользователь
Сообщений: Регистрация: 23.01.2015
25.04.2016 22:39:41
Вам надо заменить только в одной строке LINES = GET_VALUE(CANDLE,"LINES")
Пользователь
Сообщений: Регистрация: 28.02.2016
25.04.2016 22:51:27
Спасибо большое! А если мне надо будет 2 свечи текущую и вторую как быть
Пользователь
Сообщений: Регистрация: 23.01.2015
25.04.2016 22:56:07
Цитата
дмитрий б написал: Спасибо большое! А если мне надо будет 2 свечи текущую и вторую как быть
выводить обе в таблицу. в таком случае надо не менять, а копировать строки
Пользователь
Сообщений: Регистрация: 28.02.2016
25.04.2016 23:18:25
Сергей! Я эти значения вывожу в таблицу чтоб узнать работает это или нет а в дальнейшем я эти значения буду использовать в коде . Подскажите а могу ли я эти значения приобразовать в переменные примеру bar1 bar2 также с максимум и минимум этих баров как это лучше сделать
Пользователь
Сообщений: Регистрация: 23.01.2015
25.04.2016 23:54:20
Цитата
дмитрий б написал: Я эти значения вывожу в таблицу чтоб узнать работает это или нет а в дальнейшем я эти значения буду использовать в коде .
Если требуется просто узнать работает или нет, то можно запустить отладчик (в контекстном меню таблицы)
Цитата
дмитрий б написал: Подскажите а могу ли я эти значения приобразовать в переменные примеру bar1 bar2 также с максимум и минимум этих баров как это лучше сделать
Вопрос не совсем понятен, зачем преобразовывать, если у Вас и так есть массивы CANDLE и CANDLE_OLD из которых Вы уже можете взять максимум и минимум.
Пользователь
Сообщений: Регистрация: 28.02.2016
26.04.2016 09:28:43
ПОМЕНЯЛ LINES = GET_VALUE(CANDLE,"LINES") НА LINES = GET_VALUE(CANDLE_OLD,"LINES") ВСЕ РАВНО РАБОТАЕТ ПО СТАРОМУ ПОКАЗЫВАЕТ ТЕКУЩУЮ СВЕЧУ А НЕ ПРЕДЫДУЩУЮ. ЧТО ДЕЛАТЬ?
Пользователь
Сообщений: Регистрация: 23.01.2015
26.04.2016 21:49:14
Проблема в том что Вы запоминаете значение CANDLE_OLD= CANDLE в момент когда свечка CANDLE только только появилась и еще не успела сформироваться. То есть данная логика приводит к тому что Вы будете видеть не текущую свечку, а момент создания этой свечки. Чтобы решить задачу, Вам нужно переделать логику так, чтобы в момент срабатывания условия "свеча новая" в CANDLE_OLD попадало значение CANDLE которое было до срабатывания условия.
Для этого достаточно перенести ADD_ITEM в условие IF (FLAG=1), а CANDLE_OLD=CANDLE вынести после этого условия.
Пользователь
Сообщений: Регистрация: 28.02.2016
26.04.2016 22:49:48
ПРОДОЛЖЕНИЕ СООБЩЕНИЯ . КОГДА Я ПОМЕНЯЛ
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
Пользователь
Сообщений: Регистрация: 23.01.2015
26.04.2016 22:54:16
Дело не в функции а в логике скрипта, которая работает не так как Вам хочется. Вам нужно изменить логику так как написано выше.
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. ----------------------------
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2016 06:21:30
пардон, опечатка надо вычислить время предыдущей свечи, вычитая интервал из времени текущей свечи и снова прочитать с новым значением времени
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2016 06:36:06
чтобы отображать предыдущую Ваша программа запишется так
Код
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