diff --git a/currencies-widget.lua b/currencies-widget.lua
new file mode 100644
index 0000000..d8c5fb0
--- /dev/null
+++ b/currencies-widget.lua
@@ -0,0 +1,115 @@
+-- name = "Курсы валют"
+-- description = "Виджет курсов валют. Нажмите на дату чтобы изменить ее."
+-- data_source = "https://github.com/fawazahmed0/currency-api#readme"
+-- type = "widget"
+-- author = "Andrey Gavrilov"
+-- version = "1.0"
+-- arguments_help = "Введите список валютных пар в формате usd:rub btc:usd"
+-- arguments_default = "usd:rub eur:rub"
+
+local sx = require "pl.stringx"
+
+-- constants
+local red_color = "#f44336"
+local green_color = "#48ad47"
+local text_color = ui:get_secondary_text_color()
+local equals = " = "
+
+-- global vars
+local result_curr = ""
+local tabl = {}
+
+function on_resume()
+ ui:set_folding_flag(true)
+ ui:show_lines(tabl)
+end
+
+function on_alarm()
+ get_rates("latest", "curr")
+end
+
+function get_rates(loc_date,id)
+ http:get("https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/"..loc_date.."/currencies/usd.json",id)
+end
+
+function on_network_result_curr(result)
+ result_curr = result
+
+ local dat = ajson:get_value(result, "object string:date")
+ local prev_date = prev_date(dat)
+
+ get_rates(prev_date, "prev")
+end
+
+function on_network_result_prev(result)
+ tabl = create_tab(result)
+ ui:show_lines(tabl)
+end
+
+function on_click(idx)
+ ui:show_edit_dialog("Введите дату курсов", "Введите дату курсов в формате 2020.12.31. Пустое значение - текущая дата.")
+end
+
+function on_dialog_action(dat)
+ if dat == "" then dat = "latest" end
+ get_rates(sx.replace(dat, ".", "-"), "curr")
+end
+
+function create_tab(result)
+ local result_prev = result
+ local curs = aio:get_args()
+ local tab = {}
+
+ -- set title
+ local dat = ajson:get_value(result_curr, "object string:date")
+ ui:set_title(ui:get_default_title().." "..sx.replace(dat, "-", "."))
+
+ for idx, pair in ipairs(curs) do
+ local cur = sx.split(pair, ":")
+
+ local rate_curr1 = get_rate(result_curr, cur[1])
+ local rate_curr2 = get_rate(result_curr, cur[2])
+ local rate_prev1 = get_rate(result_prev, cur[1])
+ local rate_prev2 = get_rate(result_prev, cur[2])
+
+ local rate_curr = round(rate_curr2/rate_curr1, 4)
+ local rate_prev = round(rate_prev2/rate_prev1, 4)
+ local change = round((rate_curr-rate_prev)/rate_prev*100,2)
+
+ local line = "1 "..string.upper(cur[1])..equals..rate_curr.." "..string.upper(cur[2])
+ line = line..get_formatted_change_text(change)
+
+ tab[idx] = line
+ end
+
+ return tab
+end
+
+-- utils --
+
+function get_prev_date(dat)
+ local prev_date = sx.split(dat, "-")
+ local prev_time = os.time{year=prev_date[1], month=prev_date[2], day=prev_date[3]} - (60*60*24)
+ return os.date("%Y-%m-%d", prev_time)
+end
+
+function get_rate(json, currency)
+ return ajson:get_value(json, "object object:usd double:"..currency)
+end
+
+function get_formatted_change_text(change)
+ if change > 0 then
+ return " +"..change.."%"
+ elseif change < 0 then
+ return " "..change.."%"
+ else
+ return " "..change.."%"
+ end
+end
+
+function round(x, n)
+ local n = math.pow(10, n or 0)
+ local x = x * n
+ if x >= 0 then x = math.floor(x + 0.5) else x = math.ceil(x - 0.5) end
+ return x / n
+end
diff --git a/json-test.lua b/json-test.lua
index a5bc3f5..85d5b8e 100644
--- a/json-test.lua
+++ b/json-test.lua
@@ -2,5 +2,5 @@ json = require "json"
function on_resume()
local t = json.decode('[1,2,3,{"x":10}]')
- ui:show_text(t[2])
+ ui:show_text(t[4].x)
end