Постов с тегом "Робот": 2019

Робот


Торговый Lua скрипт Cubigator для Quik.

Торговый Lua скрипт Cubigator для Quik.
Запустил торгового робота собственной разработки на языке Lua. Буду выкладывать сделки и результаты месячной торговли. Можно наблюдать онлайн его работу в телеге t.me/fxtradesignal
Коротко о стратегии. Робот торгует по тренду при пробитии суточного уровня, при сломе тренда ловит разворот, при отсутствии тренда и сигнала на разворот торгует в канале. Тейк-профита нет. Используется трейлинг-тейк. Будет трейлить хоть до бесконечности. Закрывает позицию когда картинка ломается. Стоп небольшой, зависит от уровней и волатильности. Никаких индикаторов принципиально не используется. В расчет берутся только уровни и волатильность инструмента. Таймфрейм M1, расчет данных проводится раз в минуту, соответственно минутные хвосты не обрабатываться, также стоп и тейк срабатывают по закрытию свечи. Инструмент фьючерс Si, но может работать и на любом другом.

Текущая версия показывает тестовые результаты: декабрь 13757 пункт, январь 6583 пункта, февраль 5945 пункт, март 1219 пункт.


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

Как начать зарабатывать на роботах для Московской биржи и криптовалютных бирж. Регистрация на вебинар.

30 марта в 19:30 главный алготрейдер компании Live Investing — Сергей Усанов проведет открытый вебинар для трейдеров и программистов. Трейдеры Московской биржи и криптотрейдеры любых криптовалютных бирж, вебинар специально для вас :)

Как начать зарабатывать на роботах для Московской биржи и криптовалютных бирж. Регистрация на вебинар.

Торговые роботы — это современная альтернатива «ручной» торговле. Они позволяют реализовать любой ваш алгоритм, исключив из него самую главную проблему трейдеров — эмоции.

Регистрируйтесь по ссылке https://robot-qlua.ru/live_web_c, чтобы получить доступ к вебинару в день проведения.

На вебинаре Сергей расскажет вам про:
— Основы алготорговли
— Устройство скриптов в терминале Quick
— Языки программирования для торговых роботов — lua и С#
— Фреймворки для алготрейдинга
— Коннекторы к биржам
— Разработку, тестирование и оптимизацию роботов

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

Регистрация на вебинар — https://robot-qlua.ru/live_web_c


Для тех кто ещё использует tradingview для автоматизации торговли...

Если кто-нибудь ещё использует tradingview, как источник сигналов, то возможна инфа ниже будет интересна.
Я откровенно говоря после введения санкций уже давно не пользовался данным ресурсом. Но на днях наваял небольшой апник для тестирования стратегий без выставления ордеров непосредственно на биржу.  Фактически программа работает только в режиме эмуляции. Опционально можно отправлять информацию о сделках в телеграмм. 
Само приложение доступно по ссылке:http://89.223.68.98/
Для тех кто ещё использует tradingview для автоматизации торговли...

---------------------------------------------------------------------------
P.S.: Да, если у кого-то есть информация о том, как безопасно и без жёсткой переплаты оплатить подписку tradingview пишите в комментах. 
Я лично сейчас использую plati.market/search/tradingview. Там можно за 300р. купить Premium аккаунт и путём нехитрых манипуляция с vpn спокойно работать. Я бы честно сказать и платный бы аккаунт купил себе (без всяких free периодов), но к сожалению по предоплаченным картам получается слишком большая переплата.



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

Применение линейной алгебры в трейдинге

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

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

Другим важным применением линейной алгебры в алгоритмической торговле является анализ главных компонент (PCA). PCA — это статистический метод, который уменьшает размерность набора данных путем нахождения основных компонентов, которые представляют собой линейные комбинации исходных переменных, объясняющих наибольшие различия в данных. В алгоритмической торговле PCA может использоваться для определения наиболее важных факторов, влияющих на цены финансовых инструментов. Уменьшая размерность данных, PCA позволяет трейдерам сосредоточиться на наиболее важных переменных и делать более точные прогнозы относительно будущих рыночных тенденций.



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

Исходный код рабочего торгового робота на mql4

//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.00"
//+------------------------------------------------------------------+
input double    Risk             =1;         //          //
input double    Exponenta        =1.3;
input double    TPproc           =0.2;
input int       Step             =5; 
input int       n                =100; 
input int       Magic            =2017; 
//+------------------------------------------------------------------+
string comment ="System";
int r, D;
datetime NewBar =0;
double NewLot;
//+------------------------------------------------------------------+
int OnInit(){
D=1;
if (Digits==5 || Digits==3)D=10;
return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){}
//+------------------------------------------------------------------+
void OnTick(){
//+------------------------------------------------------------------+
double Lot=0;
Lot=NormalizeDouble(AccountBalance()/100*Risk/(MarketInfo(Symbol(),MODE_TICKVALUE)*100*D),2);
if (Lot<MarketInfo(Symbol(),MODE_MINLOT))Lot=MarketInfo(Symbol(),MODE_MINLOT);
//+------------------------------------------------------------------+
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01) int dig =2;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.10)     dig =1;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==1.00)     dig =0;
//+------------------------------------------------------------------+
if(NewBar!= iTime(Symbol(),0,0) ) 
{NewBar = iTime(Symbol(),0,0) ;
//+------------------------------------------------------------------+
bool Sell=false; bool Buy=false;
if(Open[n+1]<Close[n+1] && Open[n]<Close[n]) {Buy=true;}
if(Open[n+1]>Close[n+1] && Open[n]>Close[n]) {Sell=true;}
//+------------------------------------------------------------------+
bool minus=false, plus=false;

if(LastProfit()<0)
{minus=true;}
if(LastProfit()>=0)
{plus=true;}
//+------------------------------------------------------------------+
if(plus || CountH(-1)==0)
{NewLot=Lot;}

if(minus && CountH(-1)>0)
{NewLot=NormalizeDouble(LastLot()*Exponenta, dig);}
//+------------------------------------------------------------------+
double P_Max=(AccountBalance()/100)*TPproc;

if(Count(OP_SELL)==0 && Sell && LastType()!=OP_SELL && (Profit(OP_BUY)>P_Max*Count(OP_BUY) || CountH(-1)==0))
  {r=OrderSend(Symbol(),OP_SELL,NewLot,Bid,10,0,0,comment,Magic,0,Red);
  CloseBuy();}
if(Count(OP_BUY)==0 && Buy && LastType()!=OP_BUY && (Profit(OP_SELL)>P_Max*Count(OP_SELL) || CountH(-1)==0))
  {r=OrderSend(Symbol(),OP_BUY,NewLot,Ask,10,0,0,comment,Magic,0,Green);
  CloseSell();}
//+------------------------------------------------------------------+
if(Count(OP_BUY)>0 && Ask+Step*D*Point<=BuyPric())
   {r=OrderSend(Symbol(),OP_BUY,NewLot,Ask,10,0,0,comment,Magic,0,Green);}  
if(Count(OP_SELL)>0 && Bid-Step*D*Point>=SellPric())
   {r=OrderSend(Symbol(),OP_SELL,NewLot,Bid,10,0,0,comment,Magic,0,Red);}
//+------------------------------------------------------------------+
}}
//+------------------------------------------------------------------+ 
//| Считаем количество ордеров по типу                               | 
//+------------------------------------------------------------------+ 
int Count(int type)
{int count=0;
 for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && Magic==OrderMagicNumber() && (type==-1 || OrderType()==type)) count++;}
   return(count);}
//+------------------------------------------------------------------+ 
//| Функция закрытия ордеров                                         |
//+------------------------------------------------------------------+
void CloseBuy()
{double priceB;
for(int i=OrdersTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(Symbol()==OrderSymbol() && OrderType()==OP_BUY && Magic==OrderMagicNumber())
{priceB=NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID), Digits);
bool clos=OrderClose(OrderTicket(),OrderLots(),priceB,100,0);}}}
return;}
//+------------------------------------------------------------------+
void CloseSell()
{double priceS;
for(int i=OrdersTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(Symbol()==OrderSymbol() && OrderType()==OP_SELL && Magic==OrderMagicNumber())
{priceS=NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK), Digits);
bool clos=OrderClose(OrderTicket(),OrderLots(),priceS,100,0);}}}
return;}
//+------------------------------------------------------------------+ 
//| Определяем тип последнего ордера                                 | 
//+------------------------------------------------------------------+ 
int LastType()
{int type=-1;
datetime dt=0;
for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) 
   {if(OrderOpenTime()>dt)
   {dt=OrderOpenTime();
    type=OrderType();}}}
return(type);}
//+------------------------------------------------------------------+ 
//| Определяем лот последнего ордера                                 | 
//+------------------------------------------------------------------+ 
double LastLot()
{int type=-1;
double lots;
datetime dt=0;
for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) 
   {if(OrderOpenTime()>dt)
   {dt=OrderOpenTime();
    type=OrderType();
    lots=OrderLots();}}}
return(lots);}
//+------------------------------------------------------------------+ 
//| Определяем профит последнего ордера                                 | 
//+------------------------------------------------------------------+ 
double LastProfit()
{int type=-1;
double profit;
datetime dt=0;
for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) 
   {if(OrderOpenTime()>dt)
   {dt=OrderOpenTime();
    type=OrderType();
    profit=OrderProfit();}}}
return(profit);}
//+------------------------------------------------------------------+ 
//| Определяем цену последнего ордера бай                            | 
//+------------------------------------------------------------------+ 
double BuyPric() {
   double oldorderopenprice;
   int oldticketnumber;
   double unused = 0;
   int ticketnumber = 0;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      bool clos=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) {
         oldticketnumber = OrderTicket();
         if (oldticketnumber > ticketnumber) {
            oldorderopenprice = OrderOpenPrice();
            unused = oldorderopenprice;
            ticketnumber = oldticketnumber;}}}
   return (oldorderopenprice);}
//+------------------------------------------------------------------+ 
//| Определяем цену последнего ордера селл                           | 
//+------------------------------------------------------------------+ 
double SellPric() {
   double oldorderopenprice;
   int oldticketnumber;
   double unused = 0;
   int ticketnumber = 0;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      bool clos=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) {
         oldticketnumber = OrderTicket();
         if (oldticketnumber > ticketnumber) {
            oldorderopenprice = OrderOpenPrice();
            unused = oldorderopenprice;
            ticketnumber = oldticketnumber;}}}
   return (oldorderopenprice);}
//+------------------------------------------------------------------+ 
int CountH(int type)
{int count=0;
 for(int i=OrdersHistoryTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {if(Symbol()==OrderSymbol() && Magic==OrderMagicNumber() && (type==-1 || OrderType()==type)) count++;}
   return(count);}
//--------------------------------------------------------------------+
double Profit(int type) 
{double Profit = 0;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {if (Symbol()==OrderSymbol() && OrderMagicNumber()==Magic && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
       return (Profit);} 

Контртренд сегодня отработал хорошо

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

Контртренд сегодня отработал хорошо

блог


Результаты автоматической торговли за ноябрь (отчёт 1) - сумму 359,77$ (7.99% из 370 сделок)

Здравствуйте, участники форума!

Я хотел бы поделиться с вами отчетом о своей торговле за последний месяц.

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

За последний месяц я сделал 370 сделок на сумму 359,77$.

С 2022-11-08 по 2022-12-01 

Из которых 170 Long и 200 Short. Баланс на начало месяца — 4500$ 

Все 100% из них были прибыльные! 

359,77 из 4500 = 7.99% за месяц. Плечо х5. 

 

С 2022-08-18 по 2022-12-01 робот сделал — 2594,91$ из 883 сделок, и все в плюсе, ни одной в минус. Из которых 418 Long и 477 Short. 

Робот работает со стоп-лосс на 45% от банка и есть аллерт 🛑 

 

Основных стратегий в работе сейчас 2, инвертный BTCUSD и фьючерсный USDTBTC. 



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

Торговая система «Арбитраж»

Продолжаю бесплатный период своего робота.
Наибольший интерес вызвали торговые системы арбитража.
Публикую долгожданное большинством видео QUIK. Робот Сетка. ТС «Арбитраж».
Хочу отметить, что представленный пример с разницей акций Сбербанк-Сбербанк-ап представлен для общего понимания.
Робот может реализовать не только парный арбитраж.
Возможно реализовать портфельный арбитраж, можно использовать любые торговые инструменты в QUIK, можно использовать фронтраннинг, котировать другие инструменты с хеджированием и многое другое.
Заявки на разработку роботов не рассматриваю, т.к. пишу для себя и торгую на бирже тоже для себя.

Описание торговой системы «Арбитраж».

Возьмём два инструмента: Сбербанк об. по 137.18 и Сбербанк пр. по 131.85. Известно, что некоторые инструменты коррелируют между собой, т.е. цены двигаются в одном направлении. Однако, есть небольшие отличия в движении этих активов. Можно торговать эту разницу.



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

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