|
Курсы валют с мосбиржи | ☑ | ||
---|---|---|---|---|
0
VAVANSTR
04.03.22
✎
13:24
|
Может быть у кого есть кусок кода получения курсов валют с мосбиржи? Желательно на сегодняшнюю дату и на завтрашнюю
|
|||
1
Вафель
04.03.22
✎
13:55
|
(0) а что такое курс на сегодня?
Открытие, закрытие, ми-макс. средневзвешенный? |
|||
2
Вафель
04.03.22
✎
13:55
|
И на завтрашнюю я пожалуй бы тоже взял
|
|||
3
Быдло замкадное
04.03.22
✎
13:59
|
есть код на послезавтрашнюю? У меня финансовая идея есть..
|
|||
4
VAVANSTR
04.03.22
✎
14:03
|
(1) имеется в виду курс на текущий момент времени. Я его собираюсь загружать в базу каждый час. А «на завтра» у них там какой-то параметр вроде был TOMORROW
|
|||
5
МихаилМ
04.03.22
✎
14:04
|
||||
6
МихаилМ
04.03.22
✎
14:05
|
||||
7
VAVANSTR
04.03.22
✎
14:12
|
(6) там похожее, но немного другое. Из разных мест эти цифры берутся.
|
|||
8
Asmody
04.03.22
✎
14:26
|
(0) У меня есть. Забирай:
package moex import ( "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "time" ) // Quote gets current quote value from MOEX. // It returns quote value and any error encountered. func Quote(segment string) (float64, error) { moexJSON, err := getMOEXJSON(segment) if err != nil { return -1, err } return parseMOEXJSON(moexJSON) } func getMOEXJSON(segment string) ([]byte, error) { tickers := map[string]string{ "USD": "USD000000TOD", "USD_TOD": "USD000000TOD", "USD_TOM": "USD000UTSTOM", "EUR": "EUR_RUB__TOD", "EUR_TOD": "EUR_RUB__TOD", "EUR_TOM": "EUR_RUB__TOM", } ticker, ok := tickers[segment] if !ok { return []byte{}, errors.New("Unsupported ticket") } now := time.Now().Unix() moexurl := "http://www.moex.com/iss/engines/currency/markets/selt/boards/CETS/securities/%s.jsonp?iss.meta=off&iss.only=marketdata&lang=ru&_=%d" url := fmt.Sprintf(moexurl, ticker, now) resp, err := http.Get(url) if err != nil { return []byte{}, err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } func parseMOEXJSON(moexJSON []byte) (float64, error) { var dat map[string]interface{} if err := json.Unmarshal(moexJSON, &dat); err != nil { return -1, err } marketdata, ok := dat["marketdata"].(map[string]interface{}) if !ok { return -1, errors.New("Error Unmarshaling marketdata") } marketdata_data, ok := marketdata["data"].([]interface{}) if !ok { return -1, errors.New("Error Unmarshaling marketdata->data") } marketdata_data_array, ok := marketdata_data[0].([]interface{}) if !ok { return -1, errors.New("Error Unmarshaling marketdata->data->[0]") } t1 := marketdata_data_array[8].(float64) return t1, nil } |
|||
9
VAVANSTR
04.03.22
✎
14:34
|
(8) Спасибо, сейчас буду думать как это в 1С код переделать
|
|||
10
VAVANSTR
04.03.22
✎
16:19
|
Есть подобный кусок кода, но я не знаю как переделать ссылку под свою задачу
&НаСервере Процедура ПолучитьКурсФиксингаЗаПериод(ДатаНачала, ДатаОкончания, Валюта) ИмяВходящегоФайла = ПолучитьИмяВременногоФайла("xml"); //СоздатьКаталог(ВремКаталог); //УдалитьФайлы(ВремКаталог,"*.*"); //ИмяФайла="USDFIXME.xml"; //ИмяВходящегоФайла = "" + ВремКаталог + "\" + ИмяФайла; СерверИсточник="iss.moex.com"; НачалоПериода = Формат(ДатаНачала, "ДФ=yyyy-MM-dd"); КонецПериода = Формат(ДатаОкончания, "ДФ=yyyy-MM-dd"); СтрокаПараметраПолучения = "iss/statistics/engines/currency/markets/fixing/"+Валюта+"FIXME.xml?from="+НачалоПериода+"&till="+КонецПериода+"%20"; HTTP = Новый HTTPСоединение(СерверИсточник); HTTP.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла); ВыбФайл = Новый Файл(ИмяВходящегоФайла); Если ВыбФайл.Существует() Тогда ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяВходящегоФайла); Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя="row" Тогда Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда НоваяСтрока = КурсыФиксинга.Добавить(); Для Сч=0 По ЧтениеXML.КоличествоАтрибутов()-1 Цикл Если ЧтениеXML.ИмяАтрибута(Сч) = "tradedate" Тогда НоваяСтрока.Дата = Дата(СтрЗаменить(ЧтениеXML.ЗначениеАтрибута(Сч),"-","")); КонецЕсли; Если ЧтениеXML.ИмяАтрибута(Сч) = "rate" Тогда НоваяСтрока.Курс = ЧтениеXML.ЗначениеАтрибута(Сч); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
11
VAVANSTR
05.03.22
✎
03:17
|
Получилось
&НаСервере Процедура ПолучитьКурсыВалютСвечкиНаСервере(Валюта) ТаблицаКурсов = Новый ТаблицаЗначений; ТаблицаКурсов.Колонки.Добавить("Open"); ТаблицаКурсов.Колонки.Добавить("Close"); ТаблицаКурсов.Колонки.Добавить("Begin" , Новый ОписаниеТипов("Дата")); ТаблицаКурсов.Колонки.Добавить("End" , Новый ОписаниеТипов("Дата")); ТаблицаКурсов.Колонки.Добавить("High"); ТаблицаКурсов.Колонки.Добавить("Low"); ТаблицаКурсов.Колонки.Добавить("Value"); ТаблицаКурсов.Колонки.Добавить("Volume"); //ТаблицаКурсов.Колонки.Добавить("Close"); //ТаблицаКурсов.Колонки.Очистить(); //ТаблицаКурсов.Колонки.Очистить(); ТаблицаКурсов.Очистить(); Периодичность = 60;//минуты ТорговаяСистема = "currency";//ЭлементыФормы.ТорговаяСистема.Значение; Если ТорговаяСистема=Неопределено или ТорговаяСистема="" Тогда Возврат; КонецЕсли; Рынок = "index";//ЭлементыФормы.Рынок.Значение; Если Рынок=Неопределено или Рынок="" Тогда Возврат; КонецЕсли; РежимТоргов = "FIXI";//ЭлементыФормы.РежимТоргов.Значение; Если РежимТоргов=Неопределено или РежимТоргов="" Тогда Возврат; КонецЕсли; //СтрокаИнструмент = ЭлементыФормы.СписокИнструментов.ТекущаяСтрока; // //Если СтрокаИнструмент=Неопределено Тогда // Возврат; //КонецЕсли; Инструмент = Валюта + "FIX";//СтрокаИнструмент.secid; //USD Если ПустаяСтрока(Инструмент) Тогда Возврат; КонецЕсли; //#Если Клиент Тогда // // Попытка // //https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/BANEP/candles.xml?from=2017-11-01&till=2017-12-02&interval=24 ВремКаталог = КаталогВременныхФайлов() + "tempKurs"; СоздатьКаталог(ВремКаталог); УдалитьФайлы(ВремКаталог,"*.*"); ИмяФайла="candles.xml"; ИмяВходящегоФайла = "" + ВремКаталог + "\" + ИмяФайла; СерверИсточник="iss.moex.com"; СтрокаПараметраПолучения = "iss/engines/"+ТорговаяСистема+"/markets/"+Рынок+"/boards/"+РежимТоргов+"/securities/"+Инструмент+"/candles.xml"; СтрокаПараметраПолучения = СтрокаПараметраПолучения + "?from="+Формат(ДатаНачала, "ДФ=yyyy-MM-dd"); СтрокаПараметраПолучения=СтрокаПараметраПолучения+"&till="+Формат(ДатаОкончания, "ДФ=yyyy-MM-dd"); СтрокаПараметраПолучения=СтрокаПараметраПолучения+"&interval="+Периодичность; HTTP = Новый HTTPСоединение(СерверИсточник); HTTP.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла); ВыбФайл = Новый Файл(ИмяВходящегоФайла); Если ВыбФайл.Существует() Тогда ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяВходящегоФайла); МассивОткрытыхСтрок = Новый Массив; // тут будем хранить все имена открытых срок //Открываем файл Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда //Определяем начало элемента МассивОткрытыхСтрок.Добавить(ЧтениеXML.Имя); Если ЧтениеXML.Имя="data" тогда АтрибутыЭлемента = АтрибутыУзлаВСтруктуру2(ЧтениеXML); Если НЕ АтрибутыЭлемента=Неопределено Тогда ИмяДата=Неопределено; Если АтрибутыЭлемента.Свойство("id", ИмяДата) Тогда Если ИмяДата="candles" Тогда МассивОткрытыхСтрок[МассивОткрытыхСтрок.Количество()-1]="candles"; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; //Если ЧтениеXML.Имя="column" тогда //и МассивОткрытыхСтрок.Количество()=5 тогда // Если МассивОткрытыхСтрок[1]="candles" Тогда // АтрибутыЭлемента = АтрибутыУзлаВСтруктуру2(ЧтениеXML); // Если НЕ АтрибутыЭлемента=Неопределено Тогда // ТаблицаКурсов.Колонки.Добавить(АтрибутыЭлемента.NAME,,,); // //ЭлементыФормы.ТаблицаКурсов.СоздатьКолонки(); // КонецЕсли; // КонецЕсли; //КонецЕсли; Если ЧтениеXML.Имя="row" тогда //и МассивОткрытыхСтрок.Количество()=4 тогда Если МассивОткрытыхСтрок[1]="candles" Тогда АтрибутыЭлемента = АтрибутыУзлаВСтруктуру2(ЧтениеXML); Если НЕ АтрибутыЭлемента=Неопределено Тогда Строка = ТаблицаКурсов.Добавить(); ЗаполнитьЗначенияСвойств(Строка,АтрибутыЭлемента); Строка.Begin = Дата(ОчиститьДату(АтрибутыЭлемента.Begin)); Строка.End = Дата(ОчиститьДату(АтрибутыЭлемента.End)); КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда МассивОткрытыхСтрок.Удалить(МассивОткрытыхСтрок.Количество()-1); КонецЕсли; КонецЦикла; ЧтениеXML.Закрыть(); Иначе Сообщить("Файл не найден!"); КонецЕсли; // Исключение // Сообщить("Не удалось загрузить и обработать данные по инструменту" ); // КонецПопытки; текВалюта = Справочники.Валюты.НайтиПоНаименованию(Валюта); Если Не ЗначениеЗаполнено(текВалюта) Тогда Сообщить("Не найдена валюта!"); Возврат; КонецЕсли; Для Каждого текСтрока Из ТаблицаКурсов Цикл текПериод = текСтрока.End; текКурс = Число(текСтрока.Close); Если текПериод = Дата(1,1,1) ИЛИ текКурс = 0 Тогда Продолжить; КонецЕсли; НаборЗаписей = РегистрыСведений.КурсыВалют_Внутренний.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(текПериод); НаборЗаписей.Отбор.Валюта.Установить(текВалюта); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = текПериод; НоваяЗапись.Валюта = текВалюта; НоваяЗапись.Курс = текКурс; НоваяЗапись.КурсВнутренний = текКурс/100*110; НоваяЗапись.Кратность = 1; НаборЗаписей.Записать(); КонецЦикла; УдалитьФайлы(ВремКаталог,"*.*"); //#КонецЕсли КонецПроцедуры Функция АтрибутыУзлаВСтруктуру2(УзелXML) Ответ = Неопределено; Если УзелXML.КоличествоАтрибутов() > 0 Тогда Ответ = Новый Структура(); Для Сч=0 По УзелXML.КоличествоАтрибутов()-1 Цикл Ответ.Вставить(УзелXML.ИмяАтрибута(Сч), УзелXML.ЗначениеАтрибута(Сч)); КонецЦикла; КонецЕсли; Возврат Ответ; КонецФункции |
|||
12
VAVANSTR
22.03.22
✎
12:01
|
Вот более точная процедура
Процедура ПолучитьКурсыВалютСМосБиржиПоследнийАктуальный(МассивВалют) Экспорт текПериод = ТекущаяДата(); Для Каждого Валюта Из МассивВалют Цикл текВалюта = Справочники.Валюты.НайтиПоНаименованию(Валюта); текКурс = 0; Тикер = ""; Если НРег(Валюта) = "usd" Тогда Тикер = "USD000UTSTOM"; ИначеЕсли НРег(Валюта) = "eur" Тогда Тикер = "EUR_RUB__TOM"; КонецЕсли; СтрокаПараметраПолучения = "iss/engines/currency/markets/selt/boards/CETS/securities/"+Тикер+"/s.jsonp?iss.data=on&iss.meta=off&iss.only=securities,marketdata&securities.columns=PREVPRICE&marketdata.columns=LAST"; ПоляСДатами = ""; HTTPСоединение = Новый HTTPСоединение("iss.moex.com"); Запрос = Новый HTTPЗапрос(СтрокаПараметраПолучения); Попытка Ответ = HTTPСоединение.Получить(Запрос); Если Ответ.КодСостояния <> 200 тогда РегламентныеПроцедуры.СделатьЗаписьОбОшибкеПриВыполненииРЗ("ЗагрузкаВнутреннихКурсовВалютСМосБиржи", ТекущаяДата(), "Ответ.КодСостояния <> 200", Истина);; Возврат; КонецЕсли; Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Данные = ПрочитатьJSON(Чтение, Ложь, ПоляСДатами); текКурс = Данные.marketdata.data[0][0]; Если текКурс = 0 Тогда текКурс = Данные.securities.data[0][0]; КонецЕсли; Если текКурс <> 0 Тогда ПредыдущийКурс = ПолучитьКурсВалюты_ИзРегистра_КурсыВалютВнутренние(текВалюта,текПериод); Если текКурс <> ПредыдущийКурс Тогда НаборЗаписей = РегистрыСведений.КурсыВалютВнутренние.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(текПериод); НаборЗаписей.Отбор.Валюта.Установить(текВалюта); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = текПериод; НоваяЗапись.Валюта = текВалюта; НоваяЗапись.Курс = текКурс; НоваяЗапись.КурсВнутренний = текКурс*1.2; НоваяЗапись.Кратность = 1; НаборЗаписей.Записать(); КонецЕсли; КонецЕсли; Чтение.Закрыть(); Исключение РегламентныеПроцедуры.СделатьЗаписьОбОшибкеПриВыполненииРЗ("ЗагрузкаВнутреннихКурсовВалютСМосБиржи", ТекущаяДата(), ОписаниеОшибки(), Истина); Возврат; КонецПопытки; КонецЦикла; КонецПроцедуры |
|||
13
Bigbro
22.03.22
✎
12:07
|
не забудь только что завтрашний курс он конечно будет завтра но за переход позиции через ночь возьмут денег.
а то получится как с тем трейдером который 40 миллионов за валютные спекуляции остался должен. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |