English Chinese French German Italian Portuguese Spanish
Войти
  1. ВКонтакте
  2. Facebook
  1. Официальный форум 1b bot. » Последние ответы
Новые публикации Скрыть панель справаПоказать панель справа

Последние ответы

Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Возможности "Волна 3.0"
- анализ состояния криптопары на конкретной бирже и «предвидение» ее движения на ближайшее время (пока до 45-60 минут) с эффективностью 80-85%;
- работа подпрограмм long, short, trailing, stop-loss, «гашения висяков»;
- предоставление пользователю возможности настройки сценария в части % профита, стоп-лосса, «гашения висяков», шорта, трейлинга, депо и т.д.
- возможность использовать информацию бота в качестве советника для ручной торговли
- привязка сценария к API-ключу.
и т.д.
(прим: малоэффективен оказался скальпинг по спреду, удалил его коды).

Начал работу над возможностью получения и обработки ботом данных с разных криптопар (и/или бирж) для повышения эффективности принятия решений при ручной торговли (т.е. как бы полуавтоматический арбитраж, кнопку "Куплю/Продам" нажимает человек), но это в версии 3.1 или выше будет.

Последний раз редактировал Igor F P 13:38, 11.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Продолжения версий Волна 2.хх не будет, нет смысла, ибо есть более продвинутый вариант (но пользователи версий 2.хх будут иметь скидку, как и было гарантировано)
Начал сборку Волна v.3.0 = смесь Волны 2.хх и Советника 2.01 + Шорт
Что положительное- не удалось заставить работать Шорт, ибо Волна 3.0 не допустила более 3-х висяков, а когда понял что Шорт так и не проверю, курс поплыл вверх.
А при UP любой бот и стратегия будет в профите (где он постоянный UP ? )

В тоже время сегодня при падении (не большом правда) Волна 3.0 купила почти на самом дне по курсу 6460.


Однако то что удалось сделать по Шорту внушает уверенность, что все ОК.

Последний раз редактировал Igor F P 12:48, 10.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Демо-бот, часть1

Среди предложений разных типов версий ботов (ПРО, ЛАЙТ) у разработчиков есть и демо-версия для ПРО-версии (для лайта своя версия есть, но я с ней не работаю), эта версия бесплатная, работает с определенными биржами .
Отличить ее можно по обозначению на основной вкладке, там 2-а раза есть надпись DEMO.


Специфический продукт, прямо скажу, не плане оформления, нет с оформлением все нормально, а в плане возможностей.
С одной стороны он не дает понимания, как идет торговля, ибо блоки SELL и BUY вырезаны, с другой стороны его возможности уходят далеко за просто проверку правильности написания кодов стратегий.
И так.
Во первых все настройки и отображение информации вкладок Options, Bot,Wallet, Local Data, Parties,Trades,Log,Orders и т.д. такие же как в версии ПРО.
Отображение информации в окнах Watch и Log такое же как у ПРО, правда сами окна не раскрываются в полный размер, это отличие от ПРО-версии.
Работает с кодами стратегий до ПРО-версии 2.0.0.69 , дальше не понимает ряд новых функций связанных с работой с партиями.
На этом, пожалуй, сходство и завершается.
Отличие существенное и основное – отсутствуют коды покупки и продажи, а также нет обмена информацией с биржей по покупке и продаже.
К чему это приводит? Демо-версия эмулирует у себя продажу и покупку. Это значит, что бот сравнив цену и кол-во в стакане и условия стратегии «изображает» сделку, но при этом он не учитывает возможности других игроков и самих бирж перехватить его операцию или вообще не провести или время ожидания превысить и т.д.
Т.е. фактически то, что демо-версия показывает во вкладках Parties,Trades,Log,Orders в момент и по результатам операции это фантастика!
При этом более, менее демо-версия, в плане отображения результатов сделок, работает со стратегиями «золотого века» крипты (2010-01.2018), а работа стратегий учитывающих современные реалии приводит к ошибкам демо-версии, типа сплошная продажа одной и той же партии, правда в профит .


Также часто биржи "игнорируют" демо-версии запаздывая с ответами на запросы по API или вообще присылают не те данные, как например ниже, где данные стакана биржи и отправленные демо-боту не совпадают.


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

Для чего она нужна.
Ну, самое «вкусное» во второй части, позднее, ибо я пока еще только начал такое использование демо-версии и хотя подводных камней как бы и нет, но и описание не готово.
И так, демо-версия в первую очередь нужна для правильного написания кодов самой стратегии, проверки работы этих кодов на наличие ошибок в их написании, так и конфликтов между операторами, командами и т.д.
Т.е. мы написали некий код и запустили его в демо-версии. Демо-версия (как и ПРО) перед пуском проверяет код на наличие различных ошибок и в случае выявление сообщает об этом.
Как видим у нас появилось окошко, и на нем надпись, что есть ошибка - обнаружен не задокументированный идентификатор «trtk» в строке 447.


Такое сообщение показывает, что мы в где-то разделе TYPE… забыли указать что типа
Var trtk: double;
Короче, бот не знает что такое trtk, к какому типу данных относится, что с ним можно делать и т.д. И стратегия не будет работать, пока мы не устраним это.
При этом специфика 1BBOT такая, что часто (но не всегда!!!) сама ошибка находится на строке указанной ботом +1 строка, т.е. у нас написано 447, а фактически идентификатор «trtk» обнаружен в строке 448.
Поэтому смотрим на строку 448, понимаем (или не понимаем, но это значит, что не вы создатель стратегии) что за trtk, заходим в раздел TYPE и добавляем его там, ну или удаляем его в строке 448.
Следующая распространенная ошибка, забыли поставить знаки типа ; или : как того требуют правила написания Паскаль.
Как видим ниже, бот нашел ошибку и пишет, что должен быть оператор END , а найден FOR в строке 1252.


Смотрим 1252 и там нет завершения строки – отсутствует «;» .


Часто происходит не совпадение типов данных, как в примере внизу.
В строке 63 (помним, что часто надо «строка бота+1») мы попробовали вывести на экран тип данных INTEGER, но сами данные относятся к типу DOUBLE.


Также бот указывает в окне LOG все наши ошибки, они будут там находится до перезапуска бота или до обновления окна, если такое указано у нас в стратегии.
И так демо-бот помогает нам отладить коды стратегии удалив оттуда определенные ошибки.
В случае отладки стратегий с новыми операторами/командами появившимися после 69 версии, то задокументируем строки, где эти команды находятся и можно дальше будет проверять стратегию
Также демо-бот ничего делает с процедурами OnSellCompleted() и OnBuyCompleted(), ибо просто между демо-ботом и биржей нет никакого обмена данными по сделкам, ведь у демо-бота отсутствуют нужные коды.

Последний раз редактировал Igor F P 12:19, 10.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Пример вывода информации на экран монитора.

Бот предоставляет нам 4 окна для получения информации


1- Watch/Values
2- Log
3- Candlies / Deltae
4- Order book
Окна 3 и 4 предназначены для отображения уже заложенной разработчиками информации и данных из стакана. Пользователь не имеет возможности, что либо там менять, но может использовать информацию с этих экранов для своих целей, однако сохранение этой информации пользователь делает в ручную типа с помощью ручки и бумаги.
Окна 1 и 2 предназначены для отображения информации пользователя, при этом в окне 1 предоставляет вывод любых типов данных , а в окне 2 только типа String. При этом на окне 2 также выводится служебная информация бота об ошибках, ордерах и т.д..
И так как нам вывести нужную информацию в окно 1 (Watch)?
Для этого бот предоставляет нам набор разных операторов (см. справку, раздел Bot-RW), например AWriter.WriteStr() для ввода текстовой информации или AWriter.WriteInt() для вывода типа данных Integer и т.д.
Примеры кода для окна 1
AWriter.WriteBool('Флаг Sell',SellFlag); // при этом SellFlag:=Boolean, а на экране мы увидим цифру 1 если SellFlag :=true и -1 если SellFlag :=false
или более сложный вариант
AWriter.WriteBool('Sell MAX',(currTicker.sell/1.01)>=(botInfo.c1Cost/botInfo.c1Amnt) );
//выводим булевую функцию, результат будет в данном примере= 1 если условие выполнено и -1 если условие не выполнено.
AWriter.WriteStr('CC','bi3='+IntToStr(bi3)+' cc96='+ FloatToStr(Round(10000* (m[1,96]))/10000)+' cc97='+ FloatToStr(Round(10000* (m[1,97]))/10000) + '... cc105= '+ FloatToStr(Round(10000*(m[1,105]))/10000) + '...BuyFlag= '+ BoolToStr(BuyFlag) );
// выводим много цифровых данных в одну строку, ибо только «AWriter.WriteStr» позволяет разместить одновременно много данных, при этом операторы IntToStr и FloatToStr позволяют превратить для бота цифры в текст, и как видим так можно выводить одновременно несколько типов данных.
AWriter.WriteDouble('Buy next ~', botInfo.lastOpPrice/(1+ХХХХ)); // для вывода цифрового данных, самый простой для вывода вариант, только один тип данных

Но размер этого окна 1 достаточной маленький в исходном состоянии, поэтому разработчики предусмотрели возможность увеличения размера, для этого достаточно дважды «тяпнуть» по слову Watch и экран распахнется (аналогично и с окном 2 - Log).
Но такое увеличение окон возможно только в версии бота ПРО.
Демо версия не позволяет распахивать окна 1 и 2.
И нам остается довольствоваться маленьким окошком 1, в котором тяжело и не удобно разместить много инфы.
Тут нам приходит на помощь окно 2. В версии ПРО оно также расширяется, но других отличий между демо и про версиями по окну 2 нет. Однако я не использую его в версии ПРО для вывода каких-либо данных, только текущая инфа бота об ошибках, ордерах и т.д., ибо окно 1 в распахнутом виде достаточно большое, но вдруг вам будет мало в окне 1 места.
В окно 2 выводят данные типа string. Однако никто не запрещает осуществить туда вывод любых данных, правильно их указав.
В окно 2 в демо боте влезает так что бы было видно сразу 12 строк (учитывайте это, лучше поставить несколько "разделителей", чем будет мельчишение), из 12 строк одну строку делаем разделителем
Пишем:
If (secondsbetween(now,mod_log)>30) then // обновляем окно 2 один раз в 30 сек, иначе будут постоянно бегущие строки.
begin
logs0:='========= след цикл==========='
;// разделитель между циклами обновления

// а далее создаете свою информацию, выводимую в окно 2.
logs1:= '...SOv=' + sovet11 +'...BS4='+ FloatToStr(Round(10000* (kw*sumB1/sumS1))/10000) + '...BS8= '+ FloatToStr(Round(10000*(sumB/sumS))/10000)+'...V%= '+ FloatToStr(Round(100*(-100+obStat.vBuy*100/obStat.vSell))/100);
logs2:='...tr1-2^='+FloatToStr(Round(10000*(tr1-tr2))/10000) +'...tr1Buy=' +FloatToStr(Round(10000*(tr1))/10000)+'...tr2Sell='+FloatToStr(Round(10000*(tr2) )/10000);
logs3:='СursЕ= '+ FloatToStr(Round(10000* (XXXXXX))/10000) +'..Предел_H= '+ FloatToStr(Round(10000*(tt[1]))/10000)+'..BUY_h= '+ FloatToStr(Round(10000*(currTicker.buy))/10000) +'..SELL_l= '+ FloatToStr(Round(10000*(currTicker.sell))/10000) +'..Предел_L= '+ FloatToStr(Round(pord*10000* (tt[2]))/10000);
logs4:='сейчас % ...'+ FloatToStr(Round(1000* (currTicker.sell*100/GetPartyPrice(0)-100))/1000) +'...Sell Next~> ' +FloatToStr(Round(10000*ma1*(1+Profit))/10000) +'...If_Buy_to_Sell =' +FloatToStr(Round(10000*currTicker.buy*(1+Profit))/10000);

log (logs0); // начало вывода информации в окно 2, разделитель
log (sovet0); // sovet 0-8 это любая информация о чем либо имеющая тип string.
log (sovet1);
log (sovet2);
log (sovet3);
log (sovet4);
log (sovet5);
log (sovet7+'...SOv='+sovet11);
// можно и такие описания делать
log (sovet8);
log (logs4); // любая информация, пример см.выше
log (logs3);
log (logs2);
log (logs1);
mod_log:=now;
// обновление времени
end;
в результате мы в окне 2 увидим

но все наши данные при выводе их в окно 2 записываются ботом в папку LogsProg.
Что бы отменить (если не нужно) такую запись, ибо файл с инфой создается каждую секунду и достаточно быстро можно наделать десятки тысяч файлов,
во вкладке
Options-Trade options-Other снимаем выбор опции "Save program logs"
На следующей неделе будет новый материал, может быть и опишу возможности демо бота для получения профита (которые знаю )

Последний раз редактировал Igor F P 12:19, 09.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Пример работы с ордерами.

На биржах можно применять 2-а способа осуществления сделок buy и sell:
Способ А (самый простой):
«С ходу» по позициям стаканов, т.е. у вас нет выставления ордера как такового, боту сразу даем команду купить указывая цену соответствующую currTicker.buy или продать с ценой currTicker.sell. Эти значения являются крайними в стаканах и тут только одно условие требуется, что бы кол-во крипты с вашей стороны было меньше чем в стакане.

В результате ваша цена покупки = цене стакане продажи, кол-во должно быть не более чем в позиции 1 этого стакана , и соответственно для продажи также.
Если у вас в такой сделке кол-во больше чем в стакане, то это приведет к следующему, совпадающие кол-ва будут оприходованы биржей и ботом, а вот недостающее кол-во будет иметь варианты реализации или предьявлено вам в виде всплываюшего окна с указанием цены по корой биржа купит/продаст оставшуюся вашу часть крипты или будет выставлен ордер не недостающее кол-во, но с вашей ценой (может висеть бесконечно, пока или не исполнится или вы не снимете его через бот).

Способ Б:
Создавая, выставляя и снимая ордера.
Для начала нам надо создать ордер.
Для этого у бота есть операторы (они описаны в справке и вообще все примеры опираются на операторы, функции, процедуры указанные в справке)

для покупки:
LastBuyOrder:=now
LastBuyOrderPrice:=RPrice;

Для продажи:
LastSellOrder:=now;
LastSellOrderPrice:=RPrice;

Что они делают?
LastBuyOrder:=now и LastSellOrder:=now; указывают что ордер создан прямо сейчас, т.е. устанавливают время создания ордера (прим: можно попробовать поставить и определенное время, но я не пробовал)
LastBuyOrderPrice:=RPrice; и LastSellOrderPrice:=RPrice; указываю цену этого ордера.
Все это устанавливается вами в соответствующем разделе процедуры procedure TTradeStrategy.CanBuy в момент проведения сделки и создания ордера
RAmnt:=RAmntBuy;// кол-во крипты для сделки
RCanBuy:=true; // подтверждение осуществить операцию покупки
RPrice:= currTicker.buy*(1-XXX); // устанавливаем цену покупки
LastBuyOrder:=now; // операторы ордера
LastBuyOrderPrice:=RPrice;
(для sell все аналогично)
Вот все эти выше указанные операторы собранные в одном месте и создают ордер.
Т.е. здесь так же ничего особо сложного нет.
Можно еще ввести свой счетчик ордеров, добавив к указанному выше строку
BuyOrdersCNT:=BuyOrdersCNT+1;
Ибо отдельного счетчика по типам ордеров в боте нет.
Есть общий счетчик GetOrdersCnt(), он укажет сколько у нас всего ордеров выставлено и оператор GetOrderType(i), указывающий по запросу тип ордера buy или sell.
И так мы выставили ордера.
А что с ними дальше делать? Так и будут висеть все время пока не исполняться изымая наши деньги из оборота или ими (ордерами) можно управлять?
Да, можно управлять, выставлять условия существования, продолжительность «жизни» и т.д.
Вот эти операции создаются и осуществляются в разделе function TTradeStrategy.CanCancelOrder.
Самое просто отменить ордера, т.е. выставили если за 1-2 сек они не исполнены то отменяются.

Пишем в разделе function TTradeStrategy.CanCancelOrder(const AID:string;const AType:Boolean;const AAmnt,APrice:Double;const ADate:TDateTime):boolean;override;
begin
cancelAllOrders:=true;
end;


и все, вы отменили все ордера. Просто, но не эффективно. Мы же хотим, что бы ордера были выполнены и принесли профит.
Рассмотрим вариант ограничения «жизни» ордера, типа считаем если ордер за 5 мин не исполнился, то ситуация на бирже изменилась, надо этот удалить, а новый выставить.

В том же разделе пишем:
if (SecondsBetween(now,LastBuyOrder)>5*60) or (SecondsBetween(now,LastSellOrder)>5*60)
then
begin
cancelAllOrders:=true;
// сняли ордера
BuyOrdersCNT:=0; // обнулили счетчики
SellOrdersCNT:=0;
end;

Можно описать и другие условия отмены по кол-ву выставленных ордеров, по уходу курса выше или ниже ордеров и т.д.
Можно разделить удаление по типу «все buy махом» и/или «все sell махом».
В этом случае
if AType then result:=true; // удаляем buy ордера
или
if (not AType) then result:=true; // удаляем sell ордера

А если нам надо удалить конкретный ордер?
Нам известен ID ордера, правда он имеет тип данных String и ужасный не запоминающийся внешний вид типа 68ea96ef-a8aa-4e65-9139-47acaf22c500

Пишем:
Id:= GetOrderID(L+1);// учитываем при его создании, где L условный счетчик, может для упрощения даже совпадать с SellOrdersCNT например.
Далее в разделе function TTradeStrategy.CanCancelOrder
IF id=AID then result:=true;
Или по кол-ву
If RAmntBuy=AAmnt then result:=true;
Или по цене или все вместе, но для раздельного и удаления конкретного ордера надо будет вести базу, т.е. массив, куда записывать номера, кол-во, тип, цену.

Ну, а условия при которых отменяются ордера, они зависят от вашего сценария.

Последний раз редактировал Igor F P 08:15, 05.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Пример объединения партий.

Бот с использованием существующего оператора MergeParties() позволяет сделать только общее объединение всех существующих на данный момент партий в одну большую партию со средней ценой.
Например
If (botInfo.cntParties>4) and (GetPartyPrice(0)< currTicker.buy) and (GetPartyPrice(5)>2* currTicker.buy ) then // какие-то условия из-за которых требуется объединение
begin
MergeParties();
end;

в результате существующие партии (в данном примере в кол-ве более 4 шт) будут объединены в 1 большую партию.

Но таких слияний практически не надо. Только при стоп-лоссе скорее всего.
А требуется при определенных условиях произвести объединение нужных партий.
Например, когда одна партия очень маленькая и отдельно не может продаваться (например меньше или равна botMinLim1).
Тогда мы также можем использовать стандартный оператор MergeParties(); но только при наличии не более 2-х партий ибо если партий больше, то они все объединяться как указано в примере выше.
if (botInfo.cntParties =2) and ((GetPartyAmnt(0) < botMinLim1) or (GetPartyAmnt(1) < botMinLim1)) then
begin
MergeParties();
trade:='Merge, idA ='+FloatToStr(GetPartyAmnt(0)) +’…idP= ‘FloatToStr(GetPartyPrice (0));
// выводим в Watch результаты слияния
end;

Существуют гораздо более сложные варианты слияния любых партий и любых кол-в крипты, для этого предназначены новые функции в версиях 2.0,0.70 и выше.

Последний раз редактировал Igor F P 17:35, 05.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Но, запускать один только скальпинг без поддержки кодов продажи партий по профиту нельзя, ибо как показал опыт купить то вы можете по маленькой цене (но из более чем 80 возможностей получилось купить только 8 раз), а вот продать до начала движения курса вниз не всегда удается (удалось из 8 купленных продать только 1 раз и то в ручную поутру пока был профит, но тут ОЧЕНЬ много зависит от того какая криптопара и какая интенсивность торгов на ней).



И тогда у вас появляются "висяки", которые "гасятся", "шортятся" и просто продаются с установленным профитом....., т.е. должны быть в сценарии такие возможности.

Последний раз редактировал Igor F P 12:38, 03.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Пример игры на спреде (типа скальпинга).
Условия достаточно простые, как в обычной сделке, сначала надо купить дешево, что бы продать дороже, но все это происходит в весьма узком диапазоне величин между текущими курсами и с учетом предлагаемых в этих точках кол-вах крипты..
Доходность в этом случае от 1 сделки маленькая!!!, т.к. вы завязаны на малую разницу цен Buy-Sell (спред) и на предлагаемые кол-ва крипты в продаже и покупке, ибо нет смысла купить 10 шт если для последующей продаже покупателю требуется 3 шт, остальные 7 шт у вас могут зависнуть. Но т.к. таких моментов в течении короткого времени возникает очень много, курс то прыгает постоянно, то умножаем малый профит на большое кол-во сделок= что-то получаем.
Но тут же ложка дегтя - биржевые боты обычно сопротивляются таким действиям выставляя свои ордера выше/ниже ваших+ учитывать надо % комиссии биржи.
Но все же это одна из возможностей получить доход.
И так:
1) покупаем, описываем требуемые в нашем разделе Buy кол-во валюты, а также условия по цене.

Spred:=abs(obStat.wSell.Price - obStat.wBuy.Price); // спред
if (obStat.wSell.Amount>botMinLim1*1.0001) and (obStat.wBuy.Amount>obStat.wSell.Amount) and ((Spred*100/ currTicker.sell)>XXXX) then Flag_Skalp:=true;
// ХХХХ- процент от которого бот отталкивается в скальпинге, этот % должен учитывать комиссию биржи и ваш профит, а также учитывает наш YYYY (см. ниже)
if (Flag_Skalp=false) then goto SS;// обходим покупку т.к условия не выполнены

if (obStat.wBuy.Amount<obStat.wSell.Amount) then RAmntBuy:=obStat.wBuy.Amount else RAmntBuy:=obStat.wSell.Amount;
// устанавливаем кол-во в операции Buy, почему так указано выше
RAmnt:=RAmntBuy;
RCanBuy:=true;
RPrice:=currTicker.sell*(1+YYYYY);
// YYYY- отступ от currTicker.sell, что бы ваш ордер был чуть выше первого чужого ордера, очень важный параметр, надо учитывать возможность профита, а не просто покупки.
LastBuyOrder:=now; // выставляем ордера, без них тут не обойтись
LastBuyOrderPrice:=RPrice;// указываем цену ордера
trade:='Buy YES ='+FloatToStr(RPrice);// информируем себя в разделе Watch, что операция прошла (фактически не прошла ибо нет пока подтверждения от биржи)
skalpB:=1;// необходима для раздела Sell и раздела CanCancelOrder.
RAmntSell:= RAmntBuy; // указываем кол-во для продажи

и так мы типа купили.

2) продаем быстро пока ситуация (спред) не изменилась, описываем условия:

if (skalpB=1) and (currTicker.buy>=(GetPartyPrice(0)*(1+ХХХХ) then
// при скальпинге у нас должна быть только 1 партия ибо если несколько то наш скальпинг не удачный и реализацией таких партий занимается уже другая подпрограмма.
// ХХХХ- предполагаемый наш и биржи профит
begin
RCanSell:=true;
RAmnt:=GetPartyAmnt(0);
// лучше ставить кол-во "0" партии чем RAmntSell ибо биржи берут комиссию и натурой :)
RPrice:= currTicker.buy *(1-YYYY); // чуть ниже самого нижнего чужого ордера,при этом учитываем наш ХХХХ
LastSellOrder:=now; // также выставляем ордера
LastSellOrderPrice:=RPrice; // указываем цену ордера продажи
id:=GetPartyID(0);// это необходима для последующей проверки продажи партии
trade:='Sell Yes= '+FloatToStr(RPrice);// информируем себя в разделе Watch, что операция прошла (фактически не прошла ибо нет пока подтверждения от биржи)
skalpB:=0; // обнуляем переменную которая стала =1 при покупке, необходимо для ордеров и т.д.
end;

Но как я написал выше, надо еще получить подтверждение от биржи, определить время жизни и условия отмены ордеров и еще ряд проблем, в т.ч. . указание на продажу кол-ва из "0" партии,а это не всегда так.

Последний раз редактировал Igor F P 17:10, 03.10.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Valeriy2010 (26.09.2018, 13:18) писал:Как бы туда добавить время жизни ордеров.....и заменить продажу частями., на продажу партиями.. Партию купил - партию выставил на продажу


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

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

Последний раз редактировал Igor F P 14:26, 26.09.2018
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Valeriy2010 (26.09.2018, 13:22) писал:Живут,.... Времени жизни - бесконечность.. Без Вас бы не разобрался....

И так с живучестью ордеров разобрались.
Время жизни у них до исполнения любого ордера buy или sell, как только 1 ордер будет исполнен, стратегия скинет все ордера и перевыставит с учетом новой обстановки.
А вот сколько времени на ожидание исполнения ордера уйдет это не известно.
Устранена ошибка которая случайно оказалась в кодах, вот и хорошо.

Последний раз редактировал Igor F P 13:31, 26.09.2018
VIP
  1. Оффлайн
  2. Посетители
  3. 171 сообщений
  4. Сообщение
  5. Личные данные

Живут,.... Времени жизни - бесконечность.. Без Вас бы не разобрался....


------------------------------------------
http://bakuprint.com
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Valeriy2010 (26.09.2018, 13:18) писал:Отменял, потому что пытался выставить ордер меньше лимита. С этим разобрался.. Как бы туда добавить время жизни ордеров.....и заменить продажу частями., на продажу партиями.. Партию купил - партию выставил на продажу


сейчас бот выставляет ордера и они "живут"?!
VIP
  1. Оффлайн
  2. Посетители
  3. 171 сообщений
  4. Сообщение
  5. Личные данные

Отменял, потому что пытался выставить ордер меньше лимита. С этим разобрался.. Как бы туда добавить время жизни ордеров.....и заменить продажу частями., на продажу партиями.. Партию купил - партию выставил на продажу

Последний раз редактировал Valeriy2010 13:18, 26.09.2018

------------------------------------------
http://bakuprint.com
Гуру
  1. Оффлайн
  2. Посетители
  3. 164 сообщений
  4. Сообщение
  5. Личные данные

Valeriy2010 (26.09.2018, 13:11) писал:
Все так же отменяет ордера
так у вас демо-бот?
если Да, то комментариев нет
Так на Про полной все тоже самое происходит...

1)в письме Вы написали что ордера выставляются. так что выставлялось, а потом прекратилось или как?
2) на логах демо-бота ничего не определить ибо биржа просто не шлет ему никаких ответов ибо нет никаких от бота запросов по сделкам.

Последний раз редактировал Igor F P 13:14, 26.09.2018
VIP
  1. Оффлайн
  2. Посетители
  3. 171 сообщений
  4. Сообщение
  5. Личные данные

Igor F P (26.09.2018, 13:10) писал:
Valeriy2010 (26.09.2018, 12:42) писал:

Все так же отменяет ордера

http://prntscr.com/kyuorw


так у вас демо-бот?
если Да, то комментариев нет.

Так на Про полной все тоже самое происходит...


------------------------------------------
http://bakuprint.com
 

Последние темы

Изменения статуса

  1. профиль В поиске... 09:52, 29.06.2018
  2. профиль http://bit.ly/dolevik Доли проектов: Выпуск / Дивиденды / По... 09:56, 14.05.2016
  3. профиль http://ethereum.today/btccloud 16:33, 21.03.2015
  4. Просмотреть все статусы

Статьи

Статистика форума:

Сообщений
3336
Пользователей
40859
Новый участник
NikeasaB
Рекорд посещаемости
2815:05, 16.06.2014