Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1927

 
Valeriy Yastremskiy #:
Алгоритм коснулся / пересёк - передвинули не подходит?

Сложно, мне бы уже сдать что-то подходящее. Его устраивает простая визуализация уровней и перенос стопов на прошлые уровни, на этом и достаточно. Не ожидал такой подвох. Если бы он не пропал надолго, Я бы сделал, но не сейчас. Арбитраж не хочется, итак уже есть.

 

если шаг:=:const, то просто отобрази уровни с заданным шагом от текущего стоп-лосс. Ну что вот может быть проще. 

 
Maxim Kuznetsov #:

если шаг:=:const, то просто отобрази уровни с заданным шагом от текущего стоп-лосс. Ну что вот может быть проще. 

Да алгоритм Я понимаю. Открыть окно, записать что творится? Немного не те условия, чтобы вникнуть и написать.

P.S. при других раскладах Я бы не просил.

 
Подскажите кто в курсе, на демо версии не могу открыть ордер пишет что поставлен в очередь общая ошибка! В чем проблема?
 
Maxim Kuznetsov #:

скорее всего - ex4 были собраны старым компилятором. Терминал обновился, а советник древний-друевний. Надо обращаться к автору

второй вариант - не сошлись (или по тех.причинам не удостоверены) подписи. Тут надо просто подождать, пока всякие DNS обновятся и связь наладиться. 

Гипотетичный вариант - автор подпал под вечный бан. Посмотрите его профиль

подводя итог : сначала надо ЗАДАТЬ ВОПРОСЫ АВТОРУ

Спасибо

 
Vitaly Muzichenko #:

Сложно, мне бы уже сдать что-то подходящее. Его устраивает простая визуализация уровней и перенос стопов на прошлые уровни, на этом и достаточно. Не ожидал такой подвох. Если бы он не пропал надолго, Я бы сделал, но не сейчас. Арбитраж не хочется, итак уже есть.

В ОнИнит расчет уровней и рисовалка. Для другой задачи, но рядом. Твоя часть для Абсолютных уровней. 

Зы, у меня конечно не много не то. Надо понимать как отслеживаются ордера, позиции и трал, нарисовать то легко. но при достижении уровня нужно получается либо изменить цвет уровня, или удалить горизонтальную линию.
Файлы:
 
Valeriy Yastremskiy #:

В ОнИнит расчет уровней и рисовалка. Для другой задачи, но рядом. Твоя часть для Абсолютных уровней. 

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

Что смог))) надо добавлять флаги срабатывания в кроссфункцию. не успеваю.

input double   PriceOrder=0.0;         // Цена ордера, 
input int TralStep=300;                  // Шаг отслеживания SL  
input int NumberLevels=7;            // Kоличество уровней для выбранного метода ВВЕРХ

input bool FlagShowLine=true;              // Рисовать / не рисовать уровни



//---


double LevelPrice[10];                 // Количество уровней не более 10.
string HLineName[10];
bool Del=true;

string MsgAlert,Tip;

int CurLevel;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---Расчет ценовых уровней

CalculationOfLevels(PriceOrder,TralStep,NumberLevels,Tip);



if(FlagShowLine)
{
ShowLine(Tip);
}
//--- create timer
   EventSetTimer(60);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  
  Comment("");
  
   int obj_total=ObjectsTotal();
      PrintFormat("Всего %d объектов",obj_total);
      for(int i=obj_total-1; i>=0; i--)
        {
         string name=ObjectName(i);
 //        PrintFormat("Объект %d: %s",i,name);
         ObjectDelete(name);
        }
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CrossingLevel(CurLevel,Tip);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает горизонтальную линию                                     | 
//+------------------------------------------------------------------+ 
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=true,        // на заднем плане 
                 const bool            selection=false,    // выделить для перемещений 
                 const bool            hidden=false,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- если цена не задана, то установим ее на уровне текущей цены Bid 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль отображения линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  } 
  
  //+------------------------------------------------------------------+
  //| Поиск ближайших уровней                                          |
  //+------------------------------------------------------------------+  
void  ShowModify(string name, string tip, bool del)
  {
  if(del){
ObjectDelete(name);
  }
  if(!del){
 if(tip=="Sell"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrGold);
 } 
  if(tip=="Buy"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrCoral);
 } 
 }
 }
 
 //+------------------------------------------------------------------+
 //| Мониторинг пересечения уровней                                   |
 //+------------------------------------------------------------------+
 
bool CrossingLevel(int level, string tip)
{
if((tip=="Buy" && Bid > LevelPrice[level]) || (tip=="Sell" && Ask < LevelPrice[level])){
CurLevel=level++ ;
return(true);
}
return(false);
}



void CalculationOfLevels(double priceorder, int trstep, int numberl, string tip){

//---Расчет ценовых уровней

for(int i=0; i<=(numberl); i++){
if(tip=="Buy"){
LevelPrice[i] =  priceorder + trstep*Point;
if(tip=="Sell"){
LevelPrice[i] =  priceorder - trstep*Point;

}
}
CurLevel=1;
}
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowLine(string tip)
{
color ClrLine=clrRed;
if(tip=="Buy") ClrLine=clrBlue;
if(tip=="Sell") ClrLine=clrRed;
for(int i=0;i<=(NumberLevels);i++){

//Alert("ShowLine_",ShowLine,"__",LevelPrice[i],"__",ClrLine);
HLineName[i]="LevelPrice_"+(string)i+"_"+(string)LevelPrice[i];

HLineCreate(0,HLineName[i],0,LevelPrice[i],(color)ClrLine,STYLE_SOLID,1);
}
}
Файлы:
ShowLevel.mq4  16 kb
 
Valeriy Yastremskiy #:

Что смог))) надо добавлять флаги срабатывания в кроссфункцию. не успеваю.

Немного совсем не то.

У меня есть давно написанный примрно такой, но это советник с отображением, где будут открываться позиции


Сейчас нужно в коде трала внести дополнение, чтобы такие линии рисовались, где будет срабатывать трал.

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

Файлы:
 
Vitaly Muzichenko #:

Немного совсем не то.

У меня есть давно написанный примрно такой, но это советник с отображением, где будут открываться позиции


Сейчас нужно в коде трала внести дополнение, чтобы такие линии рисовались, где будет срабатывать трал.

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

Окна уже открыты все, или они открываются советником по мере появления позиций? Задача чарт найти) 
 
Valeriy Yastremskiy #:
Окна уже открыты все, или они открываются советником по мере появления позиций? Задача чарт найти) 

Полагаю, что если есть позиция, то окно открыто.