+2
1. поправил расчет лота
2. сделал удаление линий после тейка
3. сделал отрисовку линий по времени
4. тейк в процентах от канала



www.opentraders.ru/downloads/3349/

дальше не ко мне т.к. там конца не видно.

avatar

AM2

  • 30 июня 2022, 15:43
0
Лучше напишу Т.З.
*shock* 
вы хотите чтобы все это вам выполнили бесплатно и сразу?

сейчас написана основа. в следующем топике могу добавить пару функций из тз.
avatar

AM2

  • 29 июня 2022, 20:33
0
в принципе все. даже намного проще получилось



www.opentraders.ru/downloads/3349/
avatar

AM2

  • 28 июня 2022, 20:36
0
Далее все как всё как в советнике
там половина чужого кода. опишите тз целиком
avatar

AM2

  • 28 июня 2022, 19:22
0
линии у фракталов привязаны к ним, а другие можно двигать: www.opentraders.ru/downloads/3345/

avatar

AM2

  • 26 июня 2022, 11:28
+1
поправлю сегодня
avatar

AM2

  • 25 июня 2022, 13:49
0
не понял. подробнее и со скринами
avatar

AM2

  • 25 июня 2022, 13:29
0
индикатор дает некачественный сигнал:




//+------------------------------------------------------------------+
//|                                                       Sanity.mq4 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь

extern int Slip          = 30;       // реквот
extern int CloseSig      = 1;        // закрытие по сигналу
extern int Shift         = 1;        // бар индикатора
extern int Magic         = 123;      // магик

extern string Comm       = "San";    // коментарий

extern string IndName    = "Sanity - Best arrows";
extern int SignalGap     = 10;      

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,Comm,Magic,0,clr);
   
return;
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
 
{
   
double lot=Lots;

   
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
       
{
         
if(OrderProfit()>0)
           
{
            lot
=Lots;
           
break;
           
}
         
if(OrderProfit()<0)
           
{
            lot
=OrderLots()*KLot;
           
break;
           
}
       
}
     
}
     
   
if(lot>MaxLot)
      lot
=Lots;
     
   
return(lot);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 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);
             
}
           
}
       
}
     
}
 
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 
{
   
double up = iCustom(NULL,0,IndName,SignalGap,1,Shift);
   
double dn = iCustom(NULL,0,IndName,SignalGap,0,Shift);

   
bool buy = up!=EMPTY_VALUE;
   
bool sell = dn!=EMPTY_VALUE;

   
if(CountTrades()<1)
     
{
     
if(buy)
         
PutOrder(0,Ask);
     
if(sell)
         
PutOrder(1,Bid);
     
}

   
if(CloseSig>0)
     
{
     
if(buy)
         
CloseAll(1);
     
if(sell)
         
CloseAll(0);
     
}

   
Comment("\n up: ",up,
           
"\n dn: ",dn);
 
}
//+------------------------------------------------------------------+

avatar

AM2

  • 24 июня 2022, 19:45
0
смотрите:




//+------------------------------------------------------------------+
//|                                                        Timer.mq4 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

input
int sec=11;

int i=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
 
{
//--- indicator buffers mapping
   
EventSetTimer(1);
   
PutRectLabel("r");
   
PutButton("b",111,33,"BATON");
//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 
{
   
Comment("");
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRectLabel(string name)
 
{
   
ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,0,0);
//--- установим координаты метки
   
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,111);
   
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,66);
//--- установим размеры метки
   
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим цвет фона
   
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Lime);
//--- установим тип границы
   
ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,BORDER_RAISED);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
 
{
   
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
 
}
//+------------------------------------------------------------------+
//| 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[])
 
{
//---

//--- return value of prev_calculated for next call
   
return(rates_total);
 
}
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
 
{
   
if(ObjectGetInteger(0,"b",OBJPROP_STATE)==1)
     
{
     
ObjectSetInteger(0,"r",OBJPROP_BGCOLOR,Red);
     
ObjectSetInteger(0,"b",OBJPROP_STATE,false);
      i
=0;
     
}

   i
++;

   
if(i>sec)
     
ObjectSetInteger(0,"r",OBJPROP_BGCOLOR,Lime);
 
}
//+------------------------------------------------------------------+

avatar

AM2

  • 24 июня 2022, 19:11
0
Андрей поясните почему вы не сделали через таймер?


а вы просили?

сделал на тиках. таймер меняется здесь:


   
if(i>11)
     
ObjectSetInteger(0,"R",OBJPROP_BGCOLOR,Lime);
avatar

AM2

  • 24 июня 2022, 18:24
0
сейчас хоть тест проходит: www.opentraders.ru/downloads/3346/

avatar

AM2

  • 23 июня 2022, 19:11
0
готово:


//+------------------------------------------------------------------+
//|                                                         Tmer.mq4 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

int i=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
 
{
//--- indicator buffers mapping
   
PutRectLabel();
   
PutButton("b",111,33,"BATON");

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRectLabel()
 
{
   
ObjectCreate(0,"R",OBJ_RECTANGLE_LABEL,0,0,0);
//--- установим координаты метки
   
ObjectSetInteger(0,"R",OBJPROP_XDISTANCE,111);
   
ObjectSetInteger(0,"R",OBJPROP_YDISTANCE,66);
//--- установим размеры метки
   
ObjectSetInteger(0,"R",OBJPROP_XSIZE,80);
   
ObjectSetInteger(0,"R",OBJPROP_YSIZE,30);
//--- установим цвет фона
   
ObjectSetInteger(0,"R",OBJPROP_BGCOLOR,Lime);
//--- установим тип границы
   
ObjectSetInteger(0,"R",OBJPROP_BORDER_TYPE,BORDER_RAISED);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,"R",OBJPROP_CORNER,3);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
 
{
   
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
 
}
//+------------------------------------------------------------------+
//| 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[])
 
{
//---

   
if(ObjectGetInteger(0,"b",OBJPROP_STATE)==1)
     
{
     
ObjectSetInteger(0,"R",OBJPROP_BGCOLOR,Red);
     
ObjectSetInteger(0,"b",OBJPROP_STATE,false);
      i
=0;
     
}

   i
++;

   
if(i>11)
     
ObjectSetInteger(0,"R",OBJPROP_BGCOLOR,Lime);

//--- return value of prev_calculated for next call
   
return(rates_total);
 
}
//+------------------------------------------------------------------+

avatar

AM2

  • 23 июня 2022, 19:00
0
посмотрю сегодня
avatar

AM2

  • 23 июня 2022, 17:23
0
по какому именно индикатору делать? у вас их там 7 штук в архиве
avatar

AM2

  • 22 июня 2022, 23:29
0
для бесплатного тз должно быть простым
avatar

AM2

  • 22 июня 2022, 23:26
Загрузка...