0
Риск по какой формуле будем считать?

Кроме этого все есть:




//+------------------------------------------------------------------+
//|                                                     NoRedraw.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 555;      // лось
extern int TakeProfit    = 555;      // язь
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

extern string IndName    = "ZZ";
extern int Length        = 6;
extern int CountBars     = 1000;   // Количество отображаемых баров

datetime t=0;
bool b=true,s=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,NULL,Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Sig()
  {
   int sig=0;
   for(int i=0;i<=CountBars;i++)
     {
      if(iCustom(NULL,0,IndName,Length,CountBars,0,i)==High[i]) {sig=1;break;}
      if(iCustom(NULL,0,IndName,Length,CountBars,0,i)==Low[i])  {sig=2;break;}
     }
   return(sig);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   if(Sig()==2 && b)
     {
      PutOrder(0,Ask);
      Alert("Signal Buy!");
      SendMail("Signal","Signal Buy!");
      b=false;
      s=true;
     }

   if(Sig()==1 && s)
     {
      PutOrder(1,Bid);
      Alert("Signal Sell!");
      SendMail("Signal","Signal Sell!");
      s=false;
      b=true;
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      OpenPos();
     }

   Comment("\n sig: ",Sig());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 7 июня 2017, 21:03
+1
Посмотрю сегодня.
avatar

AM2

  • 7 июня 2017, 17:33
0
Мне нужно моделировать чтобы отладить все функции. А иначе долго провозишься. Лучше обратитесь к платному.
avatar

AM2

  • 7 июня 2017, 17:26
0
В упрощенном виде еще могу попытаться что то сделать. Здесь все усложняется тем что нужно дополнительно смоделировать ситуацию по ТЗ в тестере.
avatar

AM2

  • 6 июня 2017, 20:27
0
Коробка рисуется по минимуму максимуму первой часовой свече
торговля ведется от границ коробки
условие: при пробитии верхней границы коробки линией бид открывается 2 одинаковых ордера бай

Это есть:



1 ордер закрывается при соотношении 1:1 при этом у второго ордера закрывается половина, остальная часть ордера при соотношение
1:3

Тоже есть:



Если 1 ордер закрылся по профиту а 2 ордер с минусом то на продажу должны открываем 2 ордера тем же лотом если оба ордера закрылись в минус открываем 2 ордера на продажу удвоенным лотом


После двух лосей подряд увеличиваем лот.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(Losses()>1) lot=Lots*KLot*Losses();
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }


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


Этот момент реализовал путем установки стопов на цену открытия противоположного ордера.

торголя ведется до 21 часа по терминальному времени все открытые ордера закрываются


Закрывает:

avatar

AM2

  • 6 июня 2017, 20:19
0
Я сделал набросок, но индикатор не дает сигнал:


//+------------------------------------------------------------------+
//|                                                       Vector.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик

extern string IndName="FOREX VECTOR";

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,NULL,Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=0;
   lot=Lots*MathPow(KLot,Losses());
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Losses()
  {
   int losses=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
     }
   return(losses);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double buy  = iCustom(NULL,0,IndName,24,60,5,200,12,0,Shift);
   double sell = iCustom(NULL,0,IndName,24,60,5,200,12,1,Shift);

   if(buy<1000)
     {
      PutOrder(0,Ask);
     }

   if(sell<1000)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double buy  = iCustom(NULL,0,IndName,24,60,5,200,12,0,Shift);
   double sell = iCustom(NULL,0,IndName,24,60,5,200,12,1,Shift);

   if(buy<1000)
     {
      CloseAll(1);
     }

   if(sell<1000)
     {
      CloseAll(0);
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double buy  = iCustom(NULL,0,IndName,24,60,5,200,12,true,0,Shift);
   double sell = iCustom(NULL,0,IndName,24,60,5,200,12,true,1,Shift);

   if(CountTrades()<1)
     {
      OpenPos();
     }
   else ClosePos();

   Comment("\n buy: ",buy,
           "\n sell: ",sell,
           "\n losses: ",Losses(),
           "\n lot: ",Lot());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 6 июня 2017, 18:20
0
На скринах все покажите?
avatar

AM2

  • 6 июня 2017, 17:48
0
В первую очередь делаю то что проще.
avatar

AM2

  • 6 июня 2017, 17:39
0
Простое ТЗ рассмотрю.
avatar

AM2

  • 5 июня 2017, 21:18
0
В тестере судя по всему это не проверить. Только в терминале. Открыли, закрыли в ручную позицию и смотрим на действия советника

Я попытался смоделировать ситуацию в тестере, не пошло, а без этого ни куда. К платному.
avatar

AM2

  • 5 июня 2017, 21:11
0
Совсем упустил из виду, что сделка открытая помощником должна закрываться сразу, как закрылась открытая советником. Формулу додумал

По первоначальному ТЗ еще могу что то набросать.
avatar

AM2

  • 5 июня 2017, 17:33
0
На примере работы советника, покажите что не так?
avatar

AM2

  • 5 июня 2017, 17:25
0
Советник предназначен совсем для других целей.
avatar

AM2

  • 5 июня 2017, 17:21
0
но если поставить мартин 0, тоесть отключить его, то пропускает входы

Ставьте единицу

на скрине высота коробки 239, а в настройках диапозон работы стоит для наглядности 500 и не открывает ордера.


Значит не совпала другие условия:


   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && gamma<=Gamma)
     {
      if(StopLimit==1)
        {
         if(CountOrders(4)<1 && Bid<up) PutOrder(4,up+Delta*Point);
         if(CountOrders(5)<1 && Bid>dn) PutOrder(5,dn-Delta*Point);
        }
      if(StopLimit==2)
        {
         if(CountOrders(2)<1 && Bid>dn) PutOrder(2,up-Delta*Point);
         if(CountOrders(3)<1 && Bid<up) PutOrder(3,dn+Delta*Point);
        }
     }
avatar

AM2

  • 4 июня 2017, 17:51
0
Просьба скинуть ТЗ в топик.
avatar

AM2

  • 4 июня 2017, 16:34
0
Формулу в студию пожалуйста :) 
avatar

AM2

  • 4 июня 2017, 10:46
0
Кроме пунктов ТЗ в советнике есть трал, мартин, время торговли, смена на лимитные ордера: www.opentraders.ru/downloads/1597/

avatar

AM2

  • 4 июня 2017, 08:29
0
нужно чтобы в настройках можно было задавать номер ордера как в видео?
avatar

AM2

  • 3 июня 2017, 21:22
0
Все есть смотрите что получилось: www.opentraders.ru/downloads/1598/

avatar

AM2

  • 2 июня 2017, 18:26