Избранные комментарии трейдера jeremy
Как в России завести свою конкуренто-способную обрабатывающую промышленность (ОП)? — Ответ в активной промышленной политике государства.
1) Джо Стадвелл «Азиатская модель управления»
Япония переняла эту модель у канцлера Бисмарка в Германии. Эта модель выхода из отсталости универсальна, на все страны и времена. Из опыта ЮВА следует, что демократия, права человека, верховенство закона не движущие факторы выхода из отсталости, но сопутствующие.
2) Эрик Райнерт «Как богатые страны стали богатыми, и почему бедные страны остаются бедными».
3) Ха Джун Чхан «Недобрые самаритяне. Миф о свободе торговли и тайная история капитализма», «23 тайны: то, что вам не расскажут про капитализм».
4) Фридрих Лист «Национальная система политической экономии». Священная книга в Германии и Японии, когда в XIX веке они выходили из отсталости, и в Южной Корее в 1961-78 гг.
5) Дмитрий Зыкин «Запрещённая экономика. Что сделало Запад богатым, а Россию бедной».
6) Александр Бушков «Неизвестная война. Тайная история США». Как Север в 1861-65 воевал против Юга за протекционизм, чтобы США стали лидером индустрии.
Экономическая грамотность — компас на выборы 2021.
Не ждите, что либералы экономисты выведут Россию из нового застоя. Ни в одном курсе «Экономикс» нет ни слова, как в отсталой стране завести конкуренто-способную ОП.
Как и в «Капитале» Карла Маркса.
Врач-бондиатОр, смотрите, тут уже писали, собираю все в кучу.
у Вас в коде
Quotes_1 = getQuoteLevel2(«SPBFUT», «SRU0»)
Bid_Count_1 = tonumber(Quotes_1.bid_count)
if Bid_Count_1>1 then
aa= tonumber(Quotes_1.bid[Bid_Count_1].quantity)
SetCell(Table, 1, 1, tostring(aa))
end
запрашиваете стакан и первую цену бида (но почему то только один раз)
local asset = getFuturesHolding(«SPBFUT», «SPBFUT****»,«SRU0»,0).totalnet
снова один раз запрашиваете количество бумаг
дальше
repeat — until — он заходит в цикл в любом случае один раз… не понятно, почему именно этот вид цикла выбран… ну ладно...
что надо сделать:
1. завести еще одну переменную, в ней хранить номер (trans_id) отправляемой заявки. В Вашем коде каждой заявке Вы присваиваете один и тот же номер. Квик такое пропускает, но в этом нет смысла.
2. Добавить обработку колбека OnOrder, чтобы он сбрасывал в ноль хранимый номер.
т.е. код должне выглядеть примерно так:
local Active_Trans_Id = 0 — храним номер заявки тут
local ID_B_Order=10while getFuturesHolding(«SPBFUT», «SPBFUT****»,«SRU0»,0).totalnet > 0
if Active_Trans_Id == 0 then --
Quotes_1 = getQuoteLevel2(«SPBFUT», «SRU0»)
Bid_Count_1 = tonumber(Quotes_1.bid_count)if Bid_Count_1>1 then
aa= tonumber(Quotes_1.bid[Bid_Count_1].quantity)
SetCell(Table, 1, 1, tostring(aa))
endif aa>1 then
local OrderSell = {
[«ACTION»]=«NEW_ORDER»,
[«ACCOUNT»]= «SPBFUT****»,
[«OPERATION»] = «S»,
[«CLASSCODE»]=«SPBFUT»,
[«SECCODE»] = «SRU0»,
[«PRICE»] = «0»,
[«QUANTITY»] = tostring(1),
[«TRANS_ID»] = tostring(ID_B_Order),
[«TYPE»] = «M»,
}
local Err_Order = sendTransaction(OrderSell)
Active_Trans_Id = ID_B_Order — заполняем переменную номером TRANS_ID
ID_B_Order = ID_B_Order + 1 — увеличивает TRANS_ID, чтобы он был разный для каждой заявки
message(Err_Order)
end
sleep(1000)
end— где-то за пределами main
— добавьте обработку колбека OnOrder
function OnOrder(order)
if order == Active_Trans_Id and (тут надо найти вставить проверку, что заявка исполнена проверяя биты order.flags) then
Active_Trans_Id = 0 — обнуляем номер активной заявки
end
end
т.е. если Active_Trans_Id равен 0, но программа отправляет заявку и присваитвает переменной Active_Trans_Id номер заявки.
В следующем проходе никакая заявка отправляться не будет, так как Active_Trans_Id не равен 0.
Колбек OnOrder смотрит, прошла ли заявка с номером Active_Trans_Id и если прошла, обнуляет Active_Trans_Id.
P.S. код писал в блокноте, не проверял. Под номером заявки, имею ввиде Trans_Id
Алгоритм примерно такой:
1. Отправляем заявку на продажу. Скрипт запоминает trans_id этой заявки.
2. Через колбек OnOrder получаем информацию о всех заявках. Смотрим, когда у заявки с запомненным trans_id статус поменяется на «исполнена».
3. Как только заявка с запомненным trans_id исполнена, отправляем новую заявку
Придумывать ничего не нужно:
1. Для ленивых:
Пишешь бары в БД сразу DtOHLCV
База данных 5-секундных баров по RI, Si, SR c 2015 года по наст. время занимает всего лишь ~ 5 гигов. Очень даже приемлимо.
2. Не для ленивых
Делаешь примерно так, описывать неохота
2.1:
var bytesBar = BinarySerialization.SerializeToByteArray(bars);
var bsBarsZip = Compressor.Compress(bytesBar);
Далее пишешь в БД образ по дням.
Здесь делаешь BinarySerialization
сжимаешь,
пишешь в БД по дням.
2.2.
var barsStr = bars.Select(b => b.ToStr()).ToList();
var bytesBarStr = BinarySerialization.SerializeToByteArray(barsStr);
var bsBarsStrZip = Compressor.Compress(bytesBarStr);
Далее пишешь в БД образ по дням.
Здесь в начале Бары сериализуешь в List<string>,
потом делаешь BinarySerialization
и далее сжимаешь.
Этот вариант работает быстрее — проверено юнит-тестами
В БД информация хранится по дням и тикерам.
Желаю успехов.