0
Я на таймере застрял. Нужен подобный пример, код.
avatar

AM2

  • 6 октября 2015, 21:13
0
Нет не возьмусь. Советник сложный.
avatar

AM2

  • 6 октября 2015, 19:23
0
Я сделал набросок, но не работают даже самые элементарные функции ни в тестере ни на демо. Вообще не пойму в чем дело. Придется с нуля все переписывать.
avatar

AM2

  • 6 октября 2015, 19:06
0
Скоро не будет, потому что много чего отлаживать нужно, уже сейчас с этим столкнулся :) 
avatar

AM2

  • 6 октября 2015, 17:56
0
Пусть человек закажет официально, сделаю: zakaz.opentraders.ru/
avatar

AM2

  • 6 октября 2015, 16:56
0
Окончательное ТЗ так примерно получается?


1. Покупка.
2. Цена пошла в минус.
3. Включается таймер для минуса.
4. Цена пошла в плюс.
5. Включается таймер для плюса.
6. Если в настройках 0 таймер для минуса обнуляется.
7. Если в настройках 1 таймер для минуса останавливается.
8. Закрытие профита - ордер в плюсе и время профита больше значения в настройках.
9. Закрытие убытков - ордер в минусе и время стопа больше значения в настройках.
avatar

AM2

  • 6 октября 2015, 16:42
0
Еще вопрос по времени стоплосса и тейкпрофита.
Набросал алгоритм для покупок.
Правильно?

1. Покупка.
2. Цена пошла в минус.
3. Включается таймер для минуса.
4. Цена пошла в плюс.
5. Включается таймер для плюса.
6. Если в настройках 0 таймер для минуса обнуляется.
7. Если в настройках 1 таймер для минуса останавливается.
8. Закрытие профита - ордер в плюсе и время профита больше значения в настройках.
9. Закрытие убытков - ордер в минусе и время стопа больше значения в настройках.
avatar

AM2

  • 6 октября 2015, 16:31
0
Попытался расшифровать ваше ТЗ.

1. Покупка  - сигнал задается в настройках.
2. Продажа  - сигнал задается в настройках.
3. Стоплосс - по времени в минутах.
4. Тейкпрофит - задается в минутах.
5. Считаем и запоминаем убыточные сделки.
6. Считаем и запоминаем прибыльные сделки.
7. Если последняя сделка в плюсе, счетчик убытков обнуляется.


А вот эти моменты поподробнее пожалуйста.

сбрасывается или останавливается (настраивается) и включается счетчик для тейкпрофитаю и так пока не истечет время по любому направлению, после истечению времени ордер закрывается и сразу открывается новый ордер.

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


Еще не понял что означает время для стоплосса и тейкпрофита?
avatar

AM2

  • 6 октября 2015, 16:17
0
Можно более четкое ТЗ по пунктам, а не так сплошняком.

1. Покупка — сигнал
2. Продажа — сигнал
3. Покупка — стоплосс и т.д.
avatar

AM2

  • 6 октября 2015, 15:52
0
Сначала можно ссылку на первый советник?
avatar

AM2

  • 6 октября 2015, 13:11
+1
Сейчас реализовано 2/3 ТЗ. До вечера.
www.opentraders.ru/downloads/890/


avatar

AM2

  • 6 октября 2015, 12:58
0
Реализована где то треть ТЗ. Смотрите и дальше можно постепенно добавлять следующие пункты.


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

//--- Inputs
extern int    StopLoss       = 300;       // лось 
extern int    TakeProfit     = 500;       // язь
extern int    Delta          = 200;       // символ
extern double Profit         = 100;       // профит в валюте
extern double Lots           = 0.1;       // лот
extern int    Slip           = 30;        // проскальзывание
extern int    Count          = 1;         // количество открываемых ордеров
extern int    Magic          = 123;       // магик

double Lot[10]={0.01,0.02,0.03,0.06,0.12,0.24,0.48,0.96,1.92,3.84};
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+  
void CloseAll()
  {
   bool cl=true;
   double pBid,pAsk;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            pBid=MarketInfo(OrderSymbol(),MODE_BID);
            pAsk=MarketInfo(OrderSymbol(),MODE_ASK);
            if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),fND(pBid),Slip,Blue);
            if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),fND(pAsk),Slip,Red);
           }
        }
     }
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double profit=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) profit+=OrderProfit();
     }
   return(profit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
        {
         if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
            if(OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;
   if(OrdersHistoryTotal()==0)
     {
      result=0;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()>0)
        {
         result=1;//tp  
        }
      if(OrderProfit()<0)
        {
         result=2;//sl  
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// торгуем
   int res=0,i=0;
   double sl=0,tp=0,bid=0,ask=0,pr=0;
   
   i=CountTrades();
//---- buy 
   if(Open[1]<Close[1] && Open[0]>Close[1] && CountTrades()<Count)
     {
      bid=MarketInfo(Symbol(),MODE_BID);
      ask=MarketInfo(Symbol(),MODE_ASK);
      sl=NormalizeDouble(ask-StopLoss*Point,Digits);
      tp=NormalizeDouble(ask+TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_BUY,Lot[i],NormalizeDouble(ask,Digits),Slip,sl,tp,"",Magic,0,Blue);

      pr=ask-Delta*Point;
      sl=NormalizeDouble(pr+StopLoss*Point,Digits);
      tp=NormalizeDouble(pr-TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_SELLSTOP,Lot[i],NormalizeDouble(pr,Digits),Slip,sl,tp,"",Magic,0,Red);
      return;
     }

//---- sell   
   if(Open[1]>Close[1] && Open[0]<Close[1] && CountTrades()<Count)
     {
      bid=MarketInfo(Symbol(),MODE_BID);
      ask=MarketInfo(Symbol(),MODE_ASK);
      sl=NormalizeDouble(bid+StopLoss*Point,Digits);
      tp=NormalizeDouble(bid-TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_SELL,Lot[i],NormalizeDouble(bid,Digits),Slip,sl,tp,"",Magic,0,Red);

      pr=bid+Delta*Point;
      sl=NormalizeDouble(pr-StopLoss*Point,Digits);
      tp=NormalizeDouble(pr+TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),OP_BUYSTOP,Lot[i],NormalizeDouble(pr,Digits),Slip,sl,tp,"",Magic,0,Blue);
      return;
     }

   if(CountTrades()>1)
     {

     }

   if(LastDealResult()==1)DelOrder();
   if(AllProfit()>=Profit) CloseAll();
   Comment("\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 6 октября 2015, 11:56
0
Советник сложный, много всего в ТЗ наворочено.
avatar

AM2

  • 6 октября 2015, 11:37
0
Cейчас начну делать.
avatar

AM2

  • 6 октября 2015, 10:47
0
Сделал закрытие по сигналу.
www.opentraders.ru/downloads/889/

avatar

AM2

  • 5 октября 2015, 17:44
0
Т.е. сделать закрытие по обратному сигналу и открытие нового ордера или как?
avatar

AM2

  • 5 октября 2015, 15:50
0
Как то все.



//+------------------------------------------------------------------+
//|                                                         ExBB.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "BBands expert advisor"

//--- Inputs
extern double Lots         = 0.1;  // лот
extern int    StopLoss     = 5000; // лось
extern int    TakeProfit   = 5000; // язь
extern int    Slip         = 30;   // слипаж
//----
extern int    Length       = 20;   // период BB 
extern int    Deviation    = 2;    // отклонение ВВ
extern int    Magic        = 20;   // магик

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
//--- get Ind
   double BBBlue=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,1);
   double BBRed=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,1);
//--- sell conditions
   if(BBRed>0)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),
      Slip,NormalizeDouble(Bid+StopLoss*Point,Digits),
      NormalizeDouble(Bid-TakeProfit*Point,Digits),"",Magic ,0,Red);
      return;
     }
//--- buy conditions
   if(BBBlue>0)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),
      Slip,NormalizeDouble(Ask-StopLoss*Point,Digits),
      NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magic ,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
//--- get Ind
   double BBBlue=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,1);
   double BBRed=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,1);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=Magic  || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(BBRed>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(BBBlue>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }  
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1) OpenPos();
   else ClosePos();
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 5 октября 2015, 14:37
0
Сейчас посмотрю что там внутри.
avatar

AM2

  • 5 октября 2015, 14:19
0
Прикрепите пожалуйста исходник индикатор, чтобы можно было скачать.
avatar

AM2

  • 4 октября 2015, 12:09
0
Мне с пустой картой так и не дали доступ.
avatar

AM2

  • 3 октября 2015, 16:17