
--[[
параметры:
Procent - процент зигзага
--]]
Settings={
Name="ZIG_MA_v2",
Procent=2.0,
ln=50,
line=
{
{
Name = "ZIG_MA",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 0)
},
{
Name = "ZIG_MA2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0, 255)
}
}
}
function Init()
ema = {}
y1 = nil
y2 = nil
x1 = 1
x2 = 1
return 2
end
function OnCalculate(index)
de = Settings.Procent
ln = Settings.ln
if index <= 1 then
ema[index] = C(index)
else
ema[index] = (ema[index-1]*(ln-1) + C(index))/ln
end
if ln==0 then
pr = C(index)
else
pr = C(index)-ema[index]
end
vl = C(index)
if index == 1 then
y1 = vl
y2 = vl
else
if pr > y1+C(index)*de/100 and y1 < y2 then
x2 = x1
y2 = y1
x1 = index
y1 = pr
else
if pr > y1 and y1 >= y2
then
x1 = index
y1 = pr
end
end
if pr < y1-C(index)*de/100 and y1 > y2 then
x2 = x1
y2 = y1
x1 = index
y1 = pr
else
if pr < y1 and y1 <= y2
then
x1 = index
y1 = pr
end
end
end
if x1 ~= index then
curfrom = x1
curto = index
else
curfrom = x2
curto = x1
end
if curto ~= curfrom and curfrom ~= nil and curto ~= nil then
if C(curto) ~= nil and C(curfrom) ~= nil then
k = (C(curto)- C(curfrom))/(curto- curfrom)
for i = curfrom, index do
curv = i*k + C(curto) - curto*k
SetValue(i, 1, curv)
end
end
end
return vl, ema[index]
end24 мая.
Факты. Сбер купили 350мр (до 10-30), продали 350мр. Фьючерс купили 350мр, продали 350мр. АДР в нулях.
Интерпретация. Амеры невнятно растут, простое давление денег (ФРС печатает без устали). Но «чувствуется усталость», готовится слив. ИМХО.
На РЦБ РФ небольшие продажи. Все ждут «указаний от амеров». А их пока нет. Если и дальше не будет сигналов амеров, начнется резкое снижение. Время с 14-30. ИМХО тоже.
Прогноз. Прежний. Цели 286-283. Срок 2-3 дня.
Подробности — Телеграм, t.me/sberanaliz
Велс позволяет тестить торговые стратегии, но предусмотрены функциональные возможности и для торговли. Имеется API для реализации коннекторов к брокерскому ПО. Один из способов запилить коннеткор – сподвигнуть разработчиков это сделать. Они сделали виш-лист, куда можно закидывать задачи, ребята гибко смотрят на востребованность (по кол-ву лайков) и берут в работу самый востребованные запросы. Хотя вот прям недавно намекнули, что вообще-то за ними последнее слово здесь и могут и не взять в работу.
В общем есть в виш-листе задача запилить коннектор для Квика. Надо совсем немного лайков чтобы поднять задачу достаточно чтоб они её взяли в работу. Нужно зарегаться на форуме Wealth-lab 7 (ну или просто зайти если акк есть) и лайкнуть этот пост (который по совместительству запрос на разработку коннектора):
https://www.wealth-lab.com/Discussion/Request-a-broker-provider-for-Russian-market-QUIK-5473
Кому этот коннектор и сам велс могут быть интересны. Всем алго-трейдерам. И не очень алго – имеется возможность писать стратегии через конструктор – без кодинга, тестировать эти стратегии и потом вот торговать (если будет коннектор к Квику, то и Россию). По деньгам 300 или 400 баксов в год, что, кажется, дешевле выходит, чем TSLab.
Если интересна эта тема – лайкайте пост по ссылке. Если какие-то вопросы – пишите, я в теме.
Коннектор к Квику живи!
1. Что было сделано?
Ничего не делал. Смотрел...
Был прыжок доходности по портфелю более 45%, но просадка к концу недели нивелировала это достижение. Вот думаю — может прийти к фиксации дохода по портфелю?
Прошло 5 недель.
2. В каком состоянии сейчас?
| Название (ссылка на мониторинг) | Время жизни, дней | Доход, % | Старт, USC | Текущий баланс, USC | Максимальная просадка, % |
| Стратегия 1 | 26 | 13.3 | 400.0 | 453.4 | 52 |
| Стратегия 2 | 23 | 52.8 | 200.0 | 305.66 | 53 |
| Стратегия 3 | 23 | 27.4 |
local stopped
game = {
cell = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
best = 0,
-- key = nil,
-- t = nil,
colors = { [0] = QTABLE_DEFAULT_COLOR,
[2] = RGB(248,248,255),
[4] = RGB(255,239,213),
[8] = RGB(255,222,173),
[8] = RGB(255,218,185),
[16] = RGB(205,92,92),
[32] = RGB(255,69,0),
[64] = RGB(238,238,0),
[128] = RGB(238,118,33),
[256] = RGB(255,160,122),
[512] = RGB(255,0,0),
[1028]= RGB(238,18,137),
[2048]= RGB(139,0,0)
},
create_table =
function(self)
self.t = AllocTable()
for i = 1,4 do
AddColumn(self.t, i, "", true, QTABLE_INT_TYPE, 10)
end
CreateWindow(self.t)
SetWindowPos(self.t,100,100,300,130)
for i = 1,4 do
InsertRow(self.t,i)
end
SetTableNotificationCallback(self.t,
function(_t, msg, _p, key)
if msg == QTABLE_VKEY then
self.key = key
elseif msg == QTABLE_CLOSE then
stopped = true
end
end)
SetWindowCaption(self.t, "2048 game by www.bot4sale.ru")
end,
draw =
function(self)
local cell = self.cell
for row=1,4 do
for column=1,4 do
local value = cell[(row-1)*4 + column]
SetCell(self.t,row,column,value==0 and "" or tostring(value))
SetColor(self.t,row,column,game.colors[value],0,game.colors[value],0)
end
end
end,
incr =
function(self)
local t,open = self.cell,{}
for i=1,16 do
if t[i]==0 then
open[#open+1]=i
end
end
t[open[math.random(#open)]] = math.random()<0.1 and 4 or 2
end,
pack =
function(self,ofr,oto,ost,ifr,ito,ist)
local t = self.cell
for outer=ofr,oto,ost do
local skip = 0
for inner=ifr,ito,ist do
local i = outer+inner
if t[i]==0 then
skip=skip+1
else
if skip>0 then
t[i-skip*ist],t[i],self.diff = t[i],0,true
end
end
end
end
end,
comb =
function(self,ofr,oto,ost,ifr,ito,ist)
local t = self.cell
for outer=ofr,oto,ost do
for inner=ifr,ito-ist,ist do
local i,j = outer+inner,outer+inner+ist
if t[i]>0 and t[i]==t[j] then
t[i],t[j],self.diff,self.best = t[i]*2,0,true,math.max(self.best,t[i]*2)
end
end
end
end,
move =
function(self,dir)
local loopdata = { {0,12,4,1,4,1},
{0,12,4,4,1,-1},
{1,4,1,0,12,4},
{1,4,1,12,0,-4}
}
local ofr,oto,ost,ifr,ito,ist = table.unpack(loopdata[dir])
self:pack(ofr,oto,ost,ifr,ito,ist)
self:comb(ofr,oto,ost,ifr,ito,ist)
self:pack(ofr,oto,ost,ifr,ito,ist)
end,
full =
function(self)
local t = self.cell
for r=0,12,4 do
for c=1,4 do
local i,v = r+c,t[r+c]
if (v==0) or (c>1 and t[i-1]==v) or (c<4 and t[i+1]==v) or (r>0 and t[i-4]==v) or (r<12 and t[i+4]==v) then
return false
end
end
end
return true
end,
play =
function(self)
math.randomseed(os.time())
self:incr()
self:incr()
while not stopped do
self:draw()
if self.best == 2048 then
message("Поздравляю!\n\nwww.bot4sale.ru")
break
end
if self:full() then
message("Game Over!")
break
end
self.diff = false
if self.key==0x25 then -- Left
self:move(1)
elseif self.key==0x27 then -- Right
self:move(2)
elseif self.key==0x26 then -- Up
self:move(3)
elseif self.key==0x28 then -- Down
self:move(4)
end
self.key = nil
if self.diff then
self:incr()
end
sleep(100)
end
end,
rules =
function()
message("Правила игры:\n\nВ каждом раунде появляется плитка номинала «2» или «4». Нажатием стрелки игрок может скинуть все плитки игрового поля в одну из 4 сторон. Если при сбрасывании две плитки одного номинала «налетают» одна на другую, то они превращаются в одну, номинал которой равен сумме соединившихся плиток. После каждого хода на свободной секции поля появляется новая плитка номиналом «2» или «4». Если при нажатии кнопки местоположение плиток или их номинал не изменится, то ход не совершается. Если в одной строчке или в одном столбце находится более двух плиток одного номинала, то при сбрасывании они начинают соединяться с той стороны, в которую были направлены.\nЛевый столбец с номерами строк участия в игре не принимает.\n\ns_mike@rambler.ru")
end
}
local game = game
--------------------------------------------------
function main()
game:create_table()
game:rules()
game:play()
end
Оригинал здесь
for i = 0.1, 0.3, 0.1 do
message(tostring(i))
endРезультат:
Цикл:
for i = 0.1, 0.5, 0.1 do
message(tostring(i))
endРезультат:
Сегодня закрылась еще одна публичная сделка моих роботов:
На текущий момент было 191 публичных сигналов на покупку. 63 от робота AVP, 101 от робота PVVI и 27 от робота CandleMax. Вот ссылки: