Постов с тегом "алгоритм": 451

алгоритм


Исходный код рабочего торгового робота на 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);} 

Подведем общий итог по серии постов о торговли робатами.

    • 03 января 2023, 10:19
    • |
    • Maestro
  • Еще
Те, кто наблюдают мой стрим наглядно убеждаются в сказанном мной.

именно рабочий лот у меня максимум 4-6 лотов.

Не постоянно, периодически я открываю стакан и смотрю какая текущая ликвидность по этому торговому инструменту.

Если в диапазоне моей точки входа средняя ликвидности   12- 20 лотов, проблем нет, можно зафигачит и 6 лотов

Если меньше, работаешь только 2-4 лотами.

Если в точке входа -выхода  заявка исполняется частично, жду максимум 1 минуту ,  не успевает отработать полностью — отменяю приказ.

В этих моментах несложно заметить иногда проходят и реально большие объемы но цена просто не дотягивает до этого объема а работает текущий тренд.

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


О чем это говорит?

Реалии с ликвидностью именно в моих точках входа таковы, что надеяться на авось — ИДИОТИЗМ!

Если в интервале интрадей торгуешь всего 1 торговый инструмент , не имеет ни какого смысла держать на счете более 200- 300т рублей поскольку именно в точках входа выхода,  именно ликвидность просто не позволит работать большим объемом.

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

*** Алгоритм на фьючерс РТС (шорт)⁠⁠ ***

Статистика нового шортового алгоритма на фьючерс РТС, в расчётах взят за основу депозит = 40 000 руб. Стоп по стратегии 1180 пунктов. Посмотрите скрин со сделками на RIZ2 😍
Алгоритм оттестирован с 2009 года, стратегия на RSI+Stochastic. Общий профит за эти годы около 600 000 пунктов.
Все новости/обновления будут в ТГ-канале тут ---> TSLab Trading
*** Алгоритм на фьючерс РТС (шорт)⁠⁠ ***
*** Алгоритм на фьючерс РТС (шорт)⁠⁠ ***

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

Как зарабатывать на бирже, не торгуя?

Как не торговать, но зарабатывать на трейдинге?

Создавать торговых роботов!

Как зарабатывать на бирже, не торгуя?

17 октября у главного алготрейдера компании Сергея Усанова стартует сразу два курса по разработке торговых роботов:

— на C#
— на LUA

— Курс «Разработка торговых роботов на С  — это полноценное обучение программированию с нуля. 4 месяца. С нуля и для опытных.

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

— Курс «Разработка торговых роботов на LUA» — 2 месяца обучения от введения в алгоритмическую торговлю до тестирования написанных на курсе роботов.



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

5 октября в 19:00. Открытый вебинар. Как создавать роботов для торговли на криптобиржах и Московской бирже.

5 октября в 19:00. Открытый вебинар. Как создавать роботов для торговли на криптобиржах и Московской бирже.

5 октября в 19:00 главный алготрейдер компании Сергей Усанов проведет открытый вебинар «Как создавать торговых роботов для криптобирж и Московской биржи».

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

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

Приходите на вебинар и узнайте больше о торговых роботов от профессионала алготрейдинга — Сергея Усанова.

На вебинаре Сергей расскажет вам про:



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

Алгоритмическая (роботизированная) торговля... Интересное о Medallion, мой опыт кратко... Для начинающих

Алгоритмическая (роботизированная) торговля... Интересное о Medallion, мой опыт кратко... Для начинающих
Алгоритмическая торговля — один из видов трейдинга, который  привлекает огромное количество людей с техническим образованием. Я вместе с другом в 2017-2018 году увлекался написанием собственных роботов, работающих на принципах технического анализа (ТА). Мы проверили многие известные стратегии и индикаторы, и я могу ответственно заявить, что в своем подавляющем большинстве они не работают. По крайней мере в том виде, в котором изложены в популярных книгах по ТА.

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

Одной из икон алгоритмической торговли — является алгоритмический хедж-фонд Medallion, принадлежащий другой компании  Renaissance Technologies. С момента своего создания в 1980-х и на протяжении 30 лет, он показывал доходность в невероятные 40% годовых (для сравнения инвестиции Баффета оцениваются как 20% годовых). Идеологом и основным менеджером фонда был Джеймс Харрис Саймонс. История успеха данного фонда остается в фокусе внимания до сих пор. Но так как это хедж-фонд, то многое что происходит внутри него остается за непроницаемой стеной молчания, и его секрета охраняются не чуть не хуже, чем гос-тайна. Это, конечно, порождает массу вопросов, на которых нет ответов, а кроме того заставляет многих скептически относится к его результатам, подозревая Саймонса в аферизме. В целом некоторые события вокруг Medallion — дают понять, что в реальности может быть не все так гладко и красиво. Например, в книге Скотта Паттерсона «Кванты» описан вот такой интересный случай:

Параноидальный страх Саймонса, что кто-то из сотрудников мог уйти из фонда и унести с собой рецепт его волшебного эликсира, был так велик, что он был готов сделать все, чтобы похоронить карьеру изменников. В декабре 2003 года Renaissance подал в суд на двоих сотрудников, Александра Белопольского и Павла Вольфбейна, которые перешли в гигантский нью-йорский хедж-фонд Millennium Partners. Двух бывших физиков из MIT обвинили в незаконном присвоении коммерческой тайны. Вольфбейн направил ответный иск против Renaissance, обвинив фонд в том, что ему как сотруднику приходилось разрабатывать методы «обмана инвесторов, пользующихся портфельной системой для институционально трейдинга или POSIT». Имелся в виду скрытый пул ликвидности — по сути электронный рынок, тайно оперирующий заказами на покупку и продажу акций. Вольфбейн сказал, что ему были выданы инструкции создать код, «открывающий информацию, которую POSIT должен был хранить как конфиденциальную», и что он в числе нескольких других коллег отказался участвовать в этой схеме, потому что это было противозаконно. В иске также упоминались сомнительные сделки по свопам, которые он, не вдаваясь в детали, охарактеризовал как «крупное мошенничество». Из этих взаимных обвинений так ничего и не вышло, и стороны в последствии заключили мирное соглашение.


Раздаю грааль. Пока бесплатно

Привет!

Совсем скоро буду запускать автоследование в Тинькофф. Рассказываю о своем предложении и стратегии здесь и здесь.

 

Пока мы дописываем код по API брокера, предлагаю любому пользователю Smart-Lab бесплатно потестировать мою стратегию. Для этого не обязательно быть клиентом Тинькофф брокера. Более того, вы можете даже сделки не делать, а просто следить за сделками алгоритма, смотреть как работают стопы чтобы понять для себя подходит вам такая стратегия или нет. 


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



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

Миллионы на скальпинге - это реальность? Разбираем скальпинг по косточкам.

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

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

Что нужно знать про скальпинг?

  1. Чем меньше вы находитесь в сделке, тем меньше вы рискуете. Это аксиома скальпинга. С другой стороны, чем меньше вы находитесь в сделке, тем меньше зарабатываете. Это обратная сторона скальпинга.

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



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

Глубокое погружение в Мальчика (по просьбе Мальчика)

В комментарии к посту пользователь Мальчик buybuy попросил перевернуть те графики, которые были на полшестого, а также прислать полные данные по эксперименту.
Никаких проблем. Однако, чтобы зрителям не было скучно, в текущем посте рассмотрим картинки не одного, а нескольких индикаторов:

1) на основе СЛАУ с одной переменной
indicator = d1 * (d1 / d2)
2) на основе СЛАУ с двумя переменными (см. предыдущий пост)
indicator = d1 * (d1 * d4 - d2 * d3) + d2 * (d2 * d2 - d1 * d3)
3) на основе СЛАУ с тремя переменными.
indicator = d1 * (-d1 * d4 * d6 + d1 * d5 * d5 + d2 * d3 * d6 - d2 * d4 * d5 + d3 * d3 * (-d5) + d3 * d4 * d4) /<br />  (-d2 * d4 * d6 + d2 * d5 * d5 + d3 * d3 * d6 - 2 * d3 * d4 * d5 + d4 * d4 * d4) +<br /><br />  d2 * (-d1 * d3 * d6 + d1 * d4 * d5 + d2 * d2 * d6 - d2 * d3 * d5 + d4 * d4 * d4) /<br />  (d2 * d4 * d6 - d2 * d5 * d5 - d3 * d3 * d6 + 2 * d3 * d4 * d5 - d4 * d4 * d4) +<br /><br />  d3 * (-d1 * d3 * d5 + d1 * d4 * d4 + d2 * d2 * d5 - 2 * d2 * d3 * d4 + d3 * d3 * d3) /<br />  (-d2 * d4 * d6 + d2 * d5 * d5 + d3 * d3 * d6 - 2 * d3 * d4 * d5 + d4 * d4 * d4)

4) на основе СЛАУ с 4 переменными (формулу смотреть в исходниках).
Пока, думаю, этого достаточно (если, конечно, Русский ВПК не укажет дальнейшее направление).

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

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