0
если небольшой сюда вставить можно в тегах код как цитату почти
avatar

AM2

  • 26 мая 2016, 23:52
0
может файл не обновился:


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

// Настройки фона
input int XRectSize = 130;// ширина по Х
input int YRectSize = 30; // ширина по Y
input int XRectDist = 20; // отступ от угла по Х
input int YRectDist = 20; // отступ от угла по Y
input int RectCorner = 0; // какой угол
input color RectColor=Blue;// цвет фона

                           // Настройки теста
input int XLabelDist = 25;// отступ от угла по Х
input int YLabelDist = 25;// отступ от угла по Y
input int LabelCorner = 0;// какой угол
input color ProfitColor = White;  // цвет профита
input color LossColor = Yellow;   // цвет убытка
input int LabelFSize = 12;        // размер шрифта
input string LabelFont = "Arial"; // тип шрифта
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"R");
   ObjectDelete(0,"L");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRectLabel()
  {
   ObjectCreate(0,"R",OBJ_RECTANGLE_LABEL,0,0,0);

//--- установим координаты метки
   ObjectSetInteger(0,"R",OBJPROP_XDISTANCE,XRectDist);
   ObjectSetInteger(0,"R",OBJPROP_YDISTANCE,YRectDist);
//--- установим размеры метки
   ObjectSetInteger(0,"R",OBJPROP_XSIZE,XRectSize);
   ObjectSetInteger(0,"R",OBJPROP_YSIZE,YRectSize);
//--- установим цвет фона
   ObjectSetInteger(0,"R",OBJPROP_BGCOLOR,RectColor);
//--- установим тип границы
   ObjectSetInteger(0,"R",OBJPROP_BORDER_TYPE,BORDER_RAISED);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"R",OBJPROP_CORNER,RectCorner);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0,"R",OBJPROP_BACK,false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text)
  {
   ObjectDelete(0,"L");
//--- создадим текстовую метку
   ObjectCreate(0,"L",OBJ_LABEL,0,0,0);

//--- установим координаты метки
   ObjectSetInteger(0,"L",OBJPROP_XDISTANCE,XLabelDist);
   ObjectSetInteger(0,"L",OBJPROP_YDISTANCE,YLabelDist);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"L",OBJPROP_CORNER,LabelCorner);
//--- установим текст
   ObjectSetString(0,"L",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"L",OBJPROP_FONT,LabelFont);
//--- установим размер шрифта
   ObjectSetInteger(0,"L",OBJPROP_FONTSIZE,LabelFSize);
//--- установим цвет
   if(AllProfit()>0) ObjectSetInteger(0,"L",OBJPROP_COLOR,ProfitColor);
   else ObjectSetInteger(0,"L",OBJPROP_COLOR,LossColor);
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   PutRectLabel();
   PutLabel("Profit: "+(string)NormalizeDouble(AllProfit(),2)+"$");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 26 мая 2016, 23:40
0
файл *.mq4 если есть править можно
avatar

AM2

  • 26 мая 2016, 23:32
0
У вас в этом месяце уже есть заказ, присылайте исходник в следующем, посмотрю что можно сделать.
avatar

AM2

  • 26 мая 2016, 23:25
0
просто БУ и все, я не просил писать новый, а просто добавить пару строчек 
простите за наглость.

С чужим кодом намучаешься только.
avatar

AM2

  • 26 мая 2016, 22:46
0
Нет я уже сделал 2 варианта, тем более мне это не оплачивается.
avatar

AM2

  • 26 мая 2016, 10:57
0
Смотрите тот вариант который я сделал и в базу скинул, там все работает. И чем отличается старый от нового?
avatar

AM2

  • 26 мая 2016, 08:47
+2
Как это не нашел? Только что забил в поиске безубыток и выдало с десяток результатов:
www.opentraders.ru/search/?q=безубыток
Там есть и скрипты и совы.

Вот функция:


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   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)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
avatar

AM2

  • 26 мая 2016, 07:20
0
а можно оставить код который я выложил и просто добавить в него БУ и уровень БУ все оставить как есть, просто добавить БУ?

Это будет слишком просто! :D 
Перенес в свой код тянулку, чтобы можно было в тестере погонять.



www.opentraders.ru/downloads/1186/
avatar

AM2

  • 26 мая 2016, 07:14
0
Вот сейчас что то похожее нарисовалось:
www.opentraders.ru/downloads/1187/




//+------------------------------------------------------------------+
//|                                                      RSI_CCI.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Relative Strength Index"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window

#property indicator_buffers    6
#property indicator_color1     DodgerBlue
#property indicator_color2     LightSeaGreen
#property indicator_level1     20.0
#property indicator_level2     80.0
#property indicator_level3    -100.0
#property indicator_level4     100.0
#property indicator_levelcolor clrSilver
#property indicator_levelstyle STYLE_DOT
//--- input parameters
input int InpRSIPeriod=14; // RSI Period
//--- buffers
double ExtRSIBuffer[];
double ExtPosBuffer[];
double ExtNegBuffer[];
//--- input parameter
input int InpCCIPeriod=14; // CCI Period
//--- buffers
double ExtCCIBuffer[];
double ExtPriceBuffer[];
double ExtMovBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   string short_name;
//--- 2 additional buffers are used for counting.
   IndicatorBuffers(6);
   SetIndexBuffer(0,ExtRSIBuffer);
   SetIndexBuffer(1,ExtPosBuffer);
   SetIndexBuffer(2,ExtNegBuffer);
//--- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtRSIBuffer);
//--- name for DataWindow and indicator subwindow label
   short_name="RSI_CCI";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- check for input
   if(InpRSIPeriod<2)
     {
      Print("Incorrect value for input variable InpRSIPeriod = ",InpRSIPeriod);
      return(INIT_FAILED);
     }
//---
   SetIndexDrawBegin(0,InpRSIPeriod);
/////////////////
   SetIndexBuffer(4,ExtPriceBuffer);
   SetIndexBuffer(5,ExtMovBuffer);
//--- indicator line
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtCCIBuffer);
//--- check for input parameter
   if(InpCCIPeriod<=1)
     {
      Print("Wrong input parameter CCI Period=",InpCCIPeriod);
      return(INIT_FAILED);
     }
//---
//--- initialization done
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int    i,k,pos;
   double diff;
   double dSum,dMul;
//---
   if(Bars<=InpRSIPeriod || InpRSIPeriod<2)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtRSIBuffer,false);
   ArraySetAsSeries(ExtPosBuffer,false);
   ArraySetAsSeries(ExtNegBuffer,false);
   ArraySetAsSeries(close,false);
//--- preliminary calculations
   pos=prev_calculated-1;
   if(pos<=InpRSIPeriod)
     {
      //--- first RSIPeriod values of the indicator are not calculated
      ExtRSIBuffer[0]=0.0;
      ExtPosBuffer[0]=0.0;
      ExtNegBuffer[0]=0.0;
      double sump=0.0;
      double sumn=0.0;
      for(i=1; i<=InpRSIPeriod; i++)
        {
         ExtRSIBuffer[i]=0.0;
         ExtPosBuffer[i]=0.0;
         ExtNegBuffer[i]=0.0;
         diff=close[i]-close[i-1];
         if(diff>0)
            sump+=diff;
         else
            sumn-=diff;
        }
      //--- calculate first visible value
      ExtPosBuffer[InpRSIPeriod]=sump/InpRSIPeriod;
      ExtNegBuffer[InpRSIPeriod]=sumn/InpRSIPeriod;
      if(ExtNegBuffer[InpRSIPeriod]!=0.0)
         ExtRSIBuffer[InpRSIPeriod]=100.0-(100.0/(1.0+ExtPosBuffer[InpRSIPeriod]/ExtNegBuffer[InpRSIPeriod]));
      else
        {
         if(ExtPosBuffer[InpRSIPeriod]!=0.0)
            ExtRSIBuffer[InpRSIPeriod]=100.0;
         else
            ExtRSIBuffer[InpRSIPeriod]=50.0;
        }
      //--- prepare the position value for main calculation
      pos=InpRSIPeriod+1;
     }
//--- the main loop of calculations
   for(i=pos; i<rates_total && !IsStopped(); i++)
     {
      diff=close[i]-close[i-1];
      ExtPosBuffer[i]=(ExtPosBuffer[i-1]*(InpRSIPeriod-1)+(diff>0.0?diff:0.0))/InpRSIPeriod;
      ExtNegBuffer[i]=(ExtNegBuffer[i-1]*(InpRSIPeriod-1)+(diff<0.0?-diff:0.0))/InpRSIPeriod;
      if(ExtNegBuffer[i]!=0.0)
         ExtRSIBuffer[i]=100.0-100.0/(1+ExtPosBuffer[i]/ExtNegBuffer[i]);
      else
        {
         if(ExtPosBuffer[i]!=0.0)
            ExtRSIBuffer[i]=100.0;
         else
            ExtRSIBuffer[i]=50.0;
        }
     }
//---
//---
   if(rates_total<=InpCCIPeriod || InpCCIPeriod<=1)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtCCIBuffer,false);
   ArraySetAsSeries(ExtPriceBuffer,false);
   ArraySetAsSeries(ExtMovBuffer,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<InpCCIPeriod; i++)
        {
         ExtCCIBuffer[i]=0.0;
         ExtPriceBuffer[i]=(high[i]+low[i]+close[i])/3;
         ExtMovBuffer[i]=0.0;
        }
     }
//--- calculate position
   pos=prev_calculated-1;
   if(pos<InpCCIPeriod)
      pos=InpCCIPeriod;
//--- typical price and its moving average
   for(i=pos; i<rates_total; i++)
     {
      ExtPriceBuffer[i]=(high[i]+low[i]+close[i])/3;
      ExtMovBuffer[i]=SimpleMA(i,InpCCIPeriod,ExtPriceBuffer);
     }
//--- standard deviations and cci counting
   dMul=0.015/InpCCIPeriod;
   pos=InpCCIPeriod-1;
   if(pos<prev_calculated-1)
      pos=prev_calculated-2;
   i=pos;
   while(i<rates_total)
     {
      dSum=0.0;
      k=i+1-InpCCIPeriod;
      while(k<=i)
        {
         dSum+=MathAbs(ExtPriceBuffer[k]-ExtMovBuffer[i]);
         k++;
        }
      dSum*=dMul;
      if(dSum==0.0)
         ExtCCIBuffer[i]=0.0;
      else
         ExtCCIBuffer[i]=(ExtPriceBuffer[i]-ExtMovBuffer[i])/dSum;
      i++;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 25 мая 2016, 20:29
0
Подскажите а есть у Вас где-то в архивах, сова. Идея такова. Как только проходит n пунктов переводит нужную сделку в б/у.
Если есть скрипт то будет не плохо, ведь данная функция не всегда нужна. Или индюк, не важно лиж бы работало.

В базе есть где то подобный вариант, помню делал такой.
avatar

AM2

  • 25 мая 2016, 19:44
0
Можно просто бросить один на другой. Нужно что то вроде этого?

avatar

AM2

  • 25 мая 2016, 14:38
0
Я в индикаторах не силен, но посмотрю что можно сделать.
avatar

AM2

  • 25 мая 2016, 14:29
0
Вот сырой набросок:



//+------------------------------------------------------------------+
//|                                                     Tyanulka.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 500;      // лось
extern int TakeProfit    = 500;      // язь
extern int Delta         = 300;      // расстояние для отложки
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 1;        // 1-подтягивание ордера по МА
extern int BuySell       = 0;        // 1-buylimit 2-selllimit 0-off
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderStopLoss()==0 || OrderTakeProfit()==0)
              {
               if(OrderType()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderOpenPrice()+TakeProfit*Point,0,Blue);
               if(OrderType()==1) m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue);
              }
           }
        }
     }
   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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   double ma = iMA(NULL,0,12,0,0,0,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_BUYLIMIT)
              {
               if(Bid-ma>Delta*Point)
                 {
                  if(OrderOpenPrice()!=NormalizeDouble(ma,Digits))
                    {
                     mod=OrderModify(OrderTicket(),NormalizeDouble(ma,Digits),OrderStopLoss(),OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELLLIMIT)
              {
               if(ma-Bid>Delta*Point)
                 {
                  if(OrderOpenPrice()!=NormalizeDouble(ma,Digits))
                    {
                     mod=OrderModify(OrderTicket(),NormalizeDouble(ma,Digits),OrderStopLoss(),OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   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)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Mode();
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
   if(CountTrades()<1 && BuySell==1 && CountOrders(2)<1) PutOrder(2,Ask-Delta*Point);
   if(CountTrades()<1 && BuySell==2 && CountOrders(3)<1) PutOrder(3,Ask+Delta*Point);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 25 мая 2016, 10:50
0
Это не кипит, я могу подождать месяц. Но, если это не сложно, можете сделать, когда будет время?


Все дело в том что мне здесь оплачивается определенный объем работы и он очень минимальный. Тратить на один заказ целый месяц мне не интересно. Покажите на скрине что неправильно и если можно быстро поправить, сделаю.
avatar

AM2

  • 25 мая 2016, 06:23
+1
В трале еще стояло такое выражение:

if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)


Замените его на:

if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
avatar

AM2

  • 25 мая 2016, 06:06
0
Поставлю завтра на отладку посмотрю что там.
avatar

AM2

  • 24 мая 2016, 21:52
0
Переделывать не возьмусь, по ТЗ напишу в следующем месяце.
avatar

AM2

  • 24 мая 2016, 13:47
0
Во многих функциях нет проверки по магику, видимо в предыдущих версиях этого не требовалось, если знаете как сделать добавьте и должно заработать:

if(OrderMagicNumber()==Magic)
avatar

AM2

  • 24 мая 2016, 09:44