Избранное трейдера Petr S

по

«Крипта» для осторожных: промежуточные итоги первых 3-х месяцев

В продолжении начатого эксперимента по вложению в стейблкоины, а именно попытки на них заработать, публикую отчёт по истечению первых трёх месяцев. Подробное описание эксперимента доступно здесь.

В разрезе отдельных историй:

1) Пул ликвидности Binance Liquid Swap USDT-DAI

За прошедшее время было начислено 0,03700098 токена BNB, который был продан за 14,75 USDT. Кроме того было начислено 0,25 USDT и 0,41 DAI. За счёт работы пула наша доля также выросла в переоценке на 1,39 USD.
Итог в пуле 0,25+0,41+14,75+1,39=16,8 USD (здесь и далее я буду использовать USD как аналог стоимости 1 стейблкоина и 1 доллара)

«Крипта» для осторожных: промежуточные итоги первых 3-х месяцев



( Читать дальше )

сравнение yahooparser и yfinance для получения текущей цены в python

 


В предыдущей статье я написал способ где я создал класс, который будет обрабатывать мои запросы для обновления текущего значения некоторых параметров тикера для того, чтобы обрабатывать их в скрипте. 

С виду могло показаться что решение громоздкое, но это фундаментальное решение, подключаемый модуль в другие скрипты.
Я его просто подключаю и его работа меня уже не касается. 
Я могу сосредоточиться на других задачах в моменте времени и выполнять их не парясь о том что откуда и как получается. 

Я заморочился вопросом о том как мне получить цену текущего момента по ЦБ и использовать её в python скрипте. 
Мой первый способ я описал ТУТ   с этого всё и поехало. 

В комментах к предыдущему посту мне предложили, а не проще ли было использовать github.com/ranaroussi/yfinance ? 

Признаюсь, что о ней я не знал, или знал что она есть, но просто до неё я еще не дошел и решил попробовать самостоятельно изучить вопрос как работает процесс получения данных и его разновидности. 

( Читать дальше )

Опционная стратегия. 50% годовых и без стрессов )

    • 29 июля 2021, 20:16
    • |
    • kongo
  • Еще
4 года как стратегия показывает положительный результат переступая через падения рынков, панику, взлеты ГО и прочие сурпризы рынка. Если быть точнее, от 32 до 82% в год к депозитам она приносила. Есть счет с прибылью 593% за 4 года. Думаю, заявленные в оглавлении 50% — цифра заниженная. А если учесть эксперименты и изменения с целью отшлифовать систему учитывая подводные камни — очень даже заниженная. Просадки больше 11% еще не видел. Уже давно с нетерпением жду новых сюрпризов от рынка, и уже сложилось впечатление что таких больше нет. От скуки, решил учинить мониторинг результатов торговли. Для демонстрации взял самый маленький счет одного из моих инвесторов. Счет на срочном в БКС брокер. С января этого года я начал ежедневно делать скрины таблицы с клиентским счетом, чтобы продемонстрировать свою торговлю. Но только сейчас, наконец-то, решился сделать это на смартлабе. Думаю именно здесь я смогу услышать мнение профессионалов, которые заставят подумать о чем-то, с чем я еще не столкнулся. Знаю, что сейчас многих расстрою, поскольку детально систему представлять сейчас не буду. Ключевое слово — =сейчас=. Позже, конечно же представлю, но не всем. Причины объясню так же позже. Некоторые методы заложенные в стратегии конечно же буду освещать. Надеюсь что в контексте блога будет достаточно полезного. Особенно для тех, кто считают себя уже профессионалами ). Я считал себя таковым лет 10 назад. Да… опыта хватает. Как все нормальные, начинал с =кухни=. Участвовал в конкурсах, вел пам-счета (извините:)), был консультантом от брокера, продавал среднесрочные прогнозы (в альпари как-то подсчитали 82% положительных прогнозов за 2 года). Не буду перечислять все во что я влазил )). Как не странно, во всем этом сейчас я вижу пользу. От этого блога не жду каких-то заработков или известности. Но если заинтересую инвесторов, буду рад, не помешают  (меньше миллиона в рублях даже разговора не заводите. И никаких форексов!). А в общем, просто проявляю интерес к смартлабу как к клубу. Любое мнение мне важно. Спасибо!

Правда о техническом анализе, индикаторах и тех аналитиках

Ниже хочу показать пример одного графика, который мне попался в твиттере. На нем человек пытается нам показать, что определенная комбинация из индикаторов дает на золоте четкий сигнал вверх. В качестве доказательства приводится небольшая история, где показана отработка данной комбинации зелеными кружочками. 2 из 2!!! Вот это отработка — надо брать.

Но если взглянуть на этот график, то можно найти еще 1.75 примера (один не до конца совпадает), где эта же комбинация привела лишь к небольшому отскоку цен, вместо большого разворота. Эти моменты я пометил красными кружками. 
Правда о техническом анализе, индикаторах и тех аналитиках


Теперь же хочу расширить ваш кругозор на эту проблему, и рассказать, почему любые “хитрые” и “авторские” комбинации индикаторов — не работают в длинную. Существуют инвестиционные стратегии, задачей которых является постоянный перебор комбинаций всевозможных индикаторов. Делается это, очевидно, не в ручную, а алгоритмами и нейросетками. На дистанции все эти комбинации дают 50\50, но на определенных промежутках времени, комбинация может работать. Главная сложность этого процесса — вовремя понять, когда комбинация перестает работать и стратегию, основанную на ней, нужно выключать. 



( Читать дальше )

SmartMap для QUIK - ДЕМО-ВЕРСИЯ для всех!

Ура, наконец демо-версия готова!

ВАЖНО! Те, кто уже скачал архив в день размещения топика, перекачайте — он исправлен! Ссылка обновлена.

Для тех, кто пропустил:
https://smart-lab.ru/blog/697641.php  немного картинок
https://smart-lab.ru/blog/700079.php  видео работы скрипта

Итак, еще раз, что такое SmartMap? Это срез стакана, который остается на графике в виде меток, что позволяет нам видеть когда и где были крупные скопления, как они отрабатывались ценой, и где они есть сейчас. Дополнительно отображается общая ситуация по стакану в виде совокупного количества бидов и асков.

SmartMap для QUIK - ДЕМО-ВЕРСИЯ для всех!



Достаточно популярная вещь у иностранцев, присутствует в большинстве импортных терминалов под названиями BookMap/HeatMap. Однако везде имеется мощный недостаток — при изменении ТФ или любого параметра, сформированный на графике рисунок «следов» исчезает. Почему? Потому что история стакана не сохраняется. Наша разработка лишена этого минуса. Меняете ли вы тайм-фрейм, какую-то настройку отображения скрипта — неважно, метки на графике остаются. Скрипт собирает историю с момента включения Квика. Все что от вас требуется — открытый стакан по инструменту.



( Читать дальше )

Как отправлять сообщения из Квика в Телеграм! И писать в файлик разную дребедень!


Все очень и  очень просто!
Достаточно создать бота в телеге,  написать примитивный  луа  скрипт и запустить его.

Про ботов в телеге здесь  https://core.telegram.org/bots
в гугле  куча инфы  и примеров, как чего куда и зачем.


--
--СКРИПТ Niki для smart-lab.ru 260321  ревизия
---------------------------------------

-- Флаг для поддержания работы функции main
is_run=true

fut_limit_old =0
fut_limit_max =0
kgo_old       =0.5


function main( ... )  -- чудотворная функция внутри  которой все  работает

		   
		    --"r": режим чтения (по умолчанию);
			--"w": режим записи;
			--"a": режим добавления;
			--"r+": режим обновления, все предыдущие данные сохраняются;
			--"w+": режим обновления, все предыдущие данные стираются;
			--"a+": режим добавления и обновления, предыдущие данные сохраняются, запись разрешена только в конец файла.     b бинарные файлы
		   
		   -- Пытается открыть файл в режиме "чтения/записи"
		   f = io.open(getScriptPath().."\\Limits.txt","a");
		   -- Если файл не существует
		   if f == nil then 
			  -- Создает файл в режиме "записи"
			  f = io.open(getScriptPath().."\\Limits.txt","w"); 
			  -- Закрывает файл
			  f:close();
			  -- Открывает уже существующий файл в режиме "чтения/записи"
			  f = io.open(getScriptPath().."\\Limits.txt","a");
		   end;

    while is_run do    
        sleep(1000)   -- 1000 = 1 секунда    --волшебная пауза в  работе  скрипта
		
		if getFuturesLimit("A111", "A111111", 0, "SUR") ~= nil then     -- защита от  пустых таблиц    -- впишите ваши данные из Квика
		
			-- %c   - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11) 
			-- %x   - дата (пример, 09/16/98)
			-- %X   - время (пример, 23:48:10)
			
			seconds = os.time(); -- в seconds будет значение 1427052491
			date1 = os.date("%x",seconds);  --  %c   - дата (по-умолчанию) (пример, 03/22/15 22:28:11) 
			time1 = os.date("%X",seconds);  --  %c   - время (по-умолчанию) (пример, 03/22/15 22:28:11) 
			
			
			--[[
			liquidity_coef           --NUMBER  Коэффициент ликвидности  
			cbp_prev_limit           --NUMBER  Предыдущий лимит открытых позиций на спот-рынке» 
			cbplimit                 --NUMBER  Лимит открытых позиций  
			cbplused                 --NUMBER  Текущие чистые позиции  
			cbplplanned              --NUMBER  Плановые чистые позиции  
			varmargin                --NUMBER  Вариационная маржа  
			accruedint               --NUMBER  Накопленный доход   
			cbplused_for_orders      --NUMBER  Текущие чистые позиции (под заявки)  
			cbplused_for_positions   --NUMBER  Текущие чистые позиции (под открытые позиции)  
			options_premium          --NUMBER  Премия по опционам  
			ts_comission             --NUMBER  Биржевые сборы  
			kgo                      --NUMBER  Коэффициент клиентского гарантийного обеспечения  
			currcode                 --STRING   Валюта, в которой транслируется ограничение  
			real_varmargin           --NUMBER  Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены  
			--]]
			
			
			fut_limit    = getFuturesLimit("A111", "A111111", 0, "SUR").cbplused_for_positions    --  NUMBER  Текущие чистые позиции (под открытые позиции)     -- впишите ваши данные из Квика
			varmargin    = getFuturesLimit("A111", "A111111", 0, "SUR").varmargin                 -- впишите ваши данные из Квика
			accruedint   = getFuturesLimit("A111", "A111111", 0, "SUR").accruedint                -- впишите ваши данные из Квика
			ts_comission = getFuturesLimit("A111", "A111111", 0, "SUR").ts_comission              -- впишите ваши данные из Квика
			kgo          = getFuturesLimit("A111", "A111111", 0, "SUR").kgo                       -- впишите ваши данные из Квика
			
			profit = varmargin + accruedint;
	 
			--if  math.abs(fut_limit-fut_limit_old) > 10000 then       -- каждые 10000 рублей изменения ГО,   слишком частый файл печати 
			if  math.abs(fut_limit-fut_limit_old) > 100000 then       -- каждые 100000 рублей изменения ГО,   настраиваем под себя.
			
				open_lim     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit                  --NUMBER  Лимит открытых позиций
				f:write( tostring(date1).."  "..tostring(time1).."  ".."ГО: "..tostring(fut_limit).."  ".."Профит: "..tostring(profit).."  ".."Комис: "..tostring(ts_comission).."  ".. "КГО: "..tostring(kgo).."  Lim: "..tostring(open_lim)..  "\n"); -- "\n" признак конца строки
				--f:write( tostring(date1).. "  " ..tostring(time1)..  "  " .. "BID: " .. tostring(res_trans) .. "  " .. "ASK: " ..  tostring(MXU8ask_vol) .. "\n"); -- "\n" признак конца строки
				   -- Сохраняет изменения в файле на диск
				f:flush();
				
				fut_limit_old = fut_limit;
			end
			
			if fut_limit_max == 0  then   								
				fut_limit_max = fut_limit;
			end	
				
			if ( math.abs(fut_limit-fut_limit_max) > 1000000 and fut_limit>0 ) then   	  -- настраиваем под себя							
				message( tostring(fut_limit) )   ----сообщение в Квик--
				--message( tostring(time1) )
				---------------------------------------- отправляем сообщение в  Телеграмм--
				pos_free     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplplanned               --NUMBER  ГО свободных денег от позы без пониженного ГО 
				open_lim     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit                  --NUMBER  Лимит открытых позиций
				tg_message = tostring(open_lim).."   ГО:"..tostring(fut_limit).."   Поза:"..tostring(open_lim-pos_free) 
				os.execute('curl  "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ')    -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
				----------------------------------------
				-- Пример строки   https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text=  + Привет Квик!
				----------------------------------------
				fut_limit_max = fut_limit;
			end	
			
			if  math.abs(kgo-kgo_old) > 0 then
				---------------------------------------- отправляем сообщение в  телеграмм
				tg_message = tostring(kgo).." Внимание! Изменился коэффициент КГО" 
				os.execute('curl  "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ')    -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
				----------------------------------------
				-- Пример строки   https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text=  + Привет Квик!
				----------------------------------------
				kgo_old = kgo;
			end
		end
		
		
		
    end
f:close();  -- закрываем файл печати.
end		
		

-- Остановка скрипта из Квика
function OnStop(stop_flag)

    is_run=false

end


( Читать дальше )
  • обсудить на форуме:
  • QUIK

Автологин для квика на javascript

Надоело логиниться в квик каждый день по 10 раз, всё время за логином-паролем лазить в файл и копипастить. Сделал скрипт, к-й это автоматизирует. Работает на javascript, так что от версии Windows зависеть не должно.

Сам скрипт кладётся в файл типа C:\Util\Js\Q.js или куда угодно, только не у всех на виду. На этот скрипт делается ярлык, он кладётся на рабочий стол куда-то в угол, и ему прописывается горячая клавиша типа Ctrl-Alt-X или любая другая буква. После этого вы запускаете квик, появляется окно логина, нажимаете Ctrl-Alt-X и через полсекунды оно срабатывает. Важно, что ярлык должен быть на рабочем столе, иначе горячая клавиша не работает. 

Вообще вводить данные в другую программу можно двумя способами: copy&paste и эмуляция клавиш. Я в данном случае пошёл по второму пути, хотя и первый тоже реализуем и даже чем-то лучше, т.к. там не надо парится с языком. Из-за этого, если вы хотите использовать этот скрипт, нужно проверить ряд моментов и при необходимости внести исправления. 

⦁ В варианте, к-й я выкладываю, логин/пароль должны быть прописаны прямо в скрипте, но можно и читать из файла. У меня дома рабочий вариант вообще ищет их в rtf-файле где много всяких данных. Если логин/пароль положить во внешний файл, то их можно конечно и закодировать. 
⦁ Чтобы отработало правильно, надо чтобы текущий язык ввода (по сути язык ввода по умолчанию в системе) в квике был русский. Если это не так, то вначале надо поменять bEngSystem=true
⦁ У меня логин русский, а пароль английский, так что между ними производится переключение клавиатуры. Если у вас что угодно из этого не так, надо в нужных местах убрать или добавить переменную LangSwitch, к-я содержит клавиши «Alt-Shift». Если у вас опять же язык переключается по-другому, там надо прописать другие клавиши.
⦁ У меня вводится и логин и пароль. Если у вас вводится только пароль, то поменять тоже нужно и не сложно. 

В общем, можно было бы написать более универсальную версию, чтобы определяеть, когда надо переключать языки автоматом, но мне не нужно, а кому надо разберутся. Или же можно переписать через copy&paste. Делать полностью автоматизированный логин, когда вообще ничего нажимать не нужно я не хочу, потому что тогда любой, кто получит доступ к вашему компьютеру сможет получить доступ и к вашим деньгам, просто кликнув на квике. Так хоть комбинацию клавиш знать надо. 

bEngSystem=false; //язык системы по умолчанию
LangSwitch="%+!";

WshShell=WScript.CreateObject("WScript.Shell");
InitKeys();
KeysSeq=GetData();
if (KeysSeq) EnterData(KeysSeq);

//------------------------------------------------------------------------

function GetData(){
//(Возможно) читаем данные из файла и преобразуем в последовательность клавиш
//"!" означает паузу для специальных клавиш, к-е требуют время обработки
var DataFN, oStream, Data, Pos1, Pos2, Line;

if (0){ //данные в файле
	DataFN='C:/...';
	FSO=new ActiveXObject("Scripting.FileSystemObject"); 
	oStream=FSO.OpenTextFile(DataFN, 1); Line=oStream.ReadAll(); oStream.Close();
	}
else Line='имя:password';

//Tab должен быть и вначале, потому что при фокусировке квика текущее поле - список серверов
Line="{Tab}!"+Line.replace(/:/g, "{Tab}!"+LangSwitch); 
//Переключение языка в самом начале если логин русский
if (bEngSystem) Line=LangSwitch+Line; 
//конвертация русских символов
Line=Line.replace(/[А-Яа-я]/g, RusCB);

return Line;
}

function EnterData(KeysSeq){
var ret;

WScript.Sleep(300); //Пауза позволяет убрать руки от клавиатуры до того, как скрипт начал работать

ret=WshShell.AppActivate("Идентификация пользователя"); if (ret==0) return;
WScript.Sleep(100); 

aSeq=KeysSeq.split('!');
for(var i=0; i<aSeq.length; i++){
	Seq=aSeq[i]; 
	if (Seq!=''){
		WshShell.SendKeys(Seq); WScript.Sleep(100); 
		}
	}

WshShell.SendKeys("{Enter}");
//WshShell.SendKeys("%+"); WScript.Sleep(100); //switch to Russian
//WshShell.SendKeys("{Tab}"); WScript.Sleep(100); 
//WshShell.SendKeys("^V"); WScript.Sleep(100); //paste
}

function RusCB(s){
var n, ch, i;

if (s.length==1){
	ch=s;
	}
else{ //rtf
	//код символа в Ansi
	s=s.substr(2); n=parseInt(s, 16); ch=String.fromCharCode(n);
	}

//Преобразовать в Utf и найти в русских клавишах
i=RusKeys.indexOf(Ansi2Utf(ch));
//Найти соотв. латинскую клавишу
return LatKeys.charAt(i);
}

//------------------------------------------------------------------------

function Ansi2UtfN(Code){
if (Code>=192 && Code<=255) Code+=848;
else if (Code==168) Code=1025; else if (Code==184) Code=1105;
return String.fromCharCode(Code);
}

function Utf2AnsiN(Code){
if (Code>=1040 && Code<=1103) Code-=848;
else if (Code==1025) Code=168; else if (Code==1105) Code=184;
return String.fromCharCode(Code);
}

function Ansi2Utf(Str, bRev){
var Buf='', Ch, Res='', c=0, L, n, f;

L=Str.length; f=(!bRev ? Ansi2UtfN : Utf2AnsiN);
for(n=0; n<L; n++){
	Ch=Str.charCodeAt(n); Buf+=f(Ch); c++;
	if (c>=100){Res+=Buf; Buf=''; c=0;}
	}
return Res+Buf;
}

//------------------------------------------------------------------------

function alert(S){WScript.Echo(S);}

function InitKeys(){
//Проблема в том, что влияет текущий язык в той программе!
//Можно нажимать только английские клавиши. Если надо нажимать русские, надо вычислить какие им соответствуют английские
RusKeys="йцукенгшщзхъфывапролджэячсмитьбю"; LatKeys="qwertyuiop[]asdfghjkl;'zxcvbnm,.";
RusKeys=RusKeys+RusKeys.toUpperCase(); LatKeys=LatKeys+LatKeys.toUpperCase();
}

Есть другие решения: Автологин для Quik 8 x64.
  • обсудить на форуме:
  • QUIK

Алгоритм по мотивам анализа объемов - продолжение

Приветствуем! 


В  продолжении темы дорабатываем алгоритм пытаясь «снизить просадку» 
Какую работу проделываем в поисках решений — сложно описать. Мы пронаблюдали каждую сделку, при каких обстоятельствах она приносит профит, когда она чаще убыточна, есть ли логичность в ее входе, возможно есть смысл работать с частичными входами (кстати в логике скрипта увидите множество неиспользуемых блоков — их специально не удалили чтобы было видно «движение мысли»)
Пожалуй самое важное — гэпы. Практически 100% гепов попадают под нашу логику и с учетом мерзкого движения ртс в предыдущем квартале — нам это было на руку — НО как будет завтра? потому мы сделали сценарий с ограничением торговли на геп (правда не стали заморачиваться с тем что теперь 7 утра, и пока на 10.00 ограничение, которое сможете себе поправить для текущего контракта. 
(это картину не улучшило, потому ее не запостим, но в алгоритме условие оставляем — выше описание почему)



( Читать дальше )
  • обсудить на форуме:
  • TSLab

Концерн "Покровский" стал 6 в России по стоимости земли по оценке Forbes

Концерн "Покровский" стал 6 в России по стоимости земли по оценке Forbes

Сегодня издание обновило свой рейтинг, оценив 242 тыс. га, принадлежащие Концерну, в 36,3 млрд рублей. При этом отмечается, что спрос на землю превышает предложение, из чего следует возможные рост стоимости актива.

Самая высокая стоимость земли в РФ зафиксирована в Краснодарском крае, там она оценена в 176,6 тыс. за га по кадастровой стоимости. Однако в действительности реальная стоимость актива сильно зависит от логистики, межевания, состояния почв, погодных особенностей.

Все-таки, землю нельзя оторвать от прочих активов, которые на ней расположены. Поэтому я оцениваю реальную стоимость активов Концерна в 2 — 2,5 раза выше, с учетом синергии объектов от вертикальной интеграции

20 крупнейших землевладельцев России — 2021. Рейтинг Forbes

Облигации Концерн «Покровский» входят в портфели PRObonds на 6,5% — 7% от активов


Практический Трейдинг. Глубина Анализа Истории. Запихни в Меня Поглубже!



«Другой же из учеников Его сказал Ему: Господи! позволь мне прежде пойти и похоронить отца моего. Но Иисус сказал ему: иди за Мною, и предоставь мертвым погребать своих мертвецов» (Мат. 8: 21-22).

Практический Трейдинг. Глубина Анализа Истории. Запихни в Меня Поглубже!



     Как Вы понимаете, пришло время поговорить о физиологии.

     Как нам всем известно, ещё со Школы (Биржевой Торговли), самые возбудимые и чувственные места у Неё (у Рыночной Реальности) расположены неглубоко от поверхности. Ну просто так природой заведено. Чтобы Каждый (Трейдер) мог всегда хорошенько оттестировать Каждую (Систему). С удовольствием. Если вдруг приспичит им обоим. Ну или почти Каждый почти Каждую...

     Частенько доводится читать вопросы наших Уважаемых Читателей Смартлаба — где можно найти потиковую историю торгов с 1812 года?
Когда спрашиваю — ЗАЧЕМ??? следует ответ — чтобы запихнуть ей (Истории) свой тестер поглубже и как следует пошуровать им там

( Читать дальше )

....все тэги
UPDONW
Новый дизайн