Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1928

 
Valeriy Yastremskiy #:
¿El algoritmo tocado / cruzado - movido no funciona?

Difícil, me gustaría entregar ya algo adecuado. Le basta con visualizar los niveles y trasladar las paradas a los niveles anteriores, eso es suficiente. No esperaba una captura así. Si no se hubiera ido durante mucho tiempo, lo habría hecho, pero no ahora. No quiero arbitraje, ya lo tengo.

 

si paso:=:const, entonces simplemente muestra los niveles con el paso dado desde el stop loss actual. Qué puede ser más sencillo que eso.

 
Maxim Kuznetsov #:

si paso:=:const, entonces simplemente muestra los niveles con el paso dado desde el stop loss actual. Qué puede ser más sencillo que eso.

Sí algoritmo entiendo. Abrir una ventana, anotar lo que está pasando... Condiciones ligeramente diferentes, para profundizar y escribir.

P.D. En otras circunstancias no lo pediría.

 
¡Por favor, avise a quien sepa, no puedo abrir una orden en la versión demo escribe que está en cola con un error general! ¿Cuál es el problema?
 
Maxim Kuznetsov #:

Lo más probable es que ex4 haya sido construido con un compilador antiguo. El terminal se ha actualizado, pero el EA es huérfano de antigüedad. Necesitamos contactar con el autor

La segunda opción: las firmas no coinciden (o no se han verificado por razones técnicas). Sólo tienes que esperar a que se actualicen los DNS y se establecerá la conexión.

Opción hipotética: el autor es expulsado permanentemente. Mira su perfil

En resumen: primero hay que hacer preguntas al autor.

Gracias

 
Vitaly Muzichenko #:

Difícil, me gustaría entregar ya algo adecuado. Le basta con visualizar los niveles y mover las paradas a los niveles pasados, eso es suficiente. No esperaba una captura así. Si no se hubiera ido durante mucho tiempo, lo habría hecho, pero no ahora. No quiero arbitraje, ya lo tengo.

Oninit calcula los niveles y sorteos. Para una tarea diferente, pero cercana. Su parte es para los niveles absolutos.

Zy, no tengo mucho de malo, por supuesto. Necesito entender cómo se rastrean las órdenes, las posiciones y el arrastre, es fácil de dibujar, pero cuando se llega a un nivel, hay que cambiar el color del nivel, o quitar la línea horizontal.
Archivos adjuntos:
 
Valeriy Yastremskiy #:

OnInit calcula los niveles y dibuja. Para una tarea diferente, pero uno al lado del otro. Su parte es para los niveles absolutos.

Zy, ciertamente no tengo mucho de malo. Es fácil dibujar entonces. pero cuando se llega a un nivel hay que cambiar el color del nivel, o quitar la línea horizontal.

Lo que podría)))) necesidad de añadir banderas de disparo a la función cruzada. no tienen tiempo.

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);
}
}
Archivos adjuntos:
ShowLevel.mq4  16 kb
 
Valeriy Yastremskiy #:

Lo que podría)) necesita añadir banderas de activación a la función cruzada. no tengo tiempo.

Está un poco fuera de lugar.

Tengo un EA escrito hace mucho tiempo, pero es un EA que muestra dónde se abrirán las posiciones


Ahora tengo que hacer un añadido en el código de la red de arrastre para dibujar esas líneas donde se activará la red de arrastre.

La tarea se complica por el hecho de que el EA de arrastre se establece en un gráfico y las líneas deben dibujarse en todos los gráficos donde hay posiciones abiertas.

Archivos adjuntos:
 
Vitaly Muzichenko #:

Eso está un poco fuera de lugar.

Tengo uno escrito desde hace tiempo como este, pero es un EA con una visualización de dónde se abrirán las posiciones


Ahora tenemos que hacer una adición en el código de la red de arrastre para dibujar esas líneas donde se activará la red de arrastre.

La tarea se complica por el hecho de que el EA de arrastre se establece en un gráfico y las líneas deben dibujarse en todos los gráficos donde hay posiciones abiertas.

¿Están todas las ventanas ya abiertas, o las abre el EA a medida que surgen las posiciones? El reto es encontrar un gráfico)
 
Valeriy Yastremskiy #:
¿Están todas las ventanas ya abiertas, o las abre el EA a medida que surgen las posiciones? El reto es encontrar un gráfico)

Supongo que si hay una posición, la ventana está abierta.