Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1927

 

se passo:=:const, então simplesmente exiba os níveis com o passo dado a partir da perda da parada atual. O que poderia ser mais simples do que isso.

 
Maxim Kuznetsov #:

se passo:=:const, então simplesmente exiba os níveis com o passo dado a partir da perda da parada atual. O que poderia ser mais simples do que isso.

Sim algoritmo eu entendo. Abrir uma janela, anotar o que está acontecendo? Condições levemente diferentes, para mergulhar e escrever.

P.S. Em outras circunstâncias, eu não perguntaria.

 
Por favor, avise quem sabe, não posso abrir uma ordem na versão demo escreve que ela está enfileirada com um erro geral! Qual é o problema?
 
Maxim Kuznetsov #:

muito provavelmente - o ex4 foi construído com um antigo compilador. O terminal foi atualizado, mas o EA é antigo órfão. Precisamos entrar em contato com o autor

A segunda opção - as assinaturas não correspondem (ou não foram verificadas por razões técnicas). Você só precisa esperar até as atualizações do DNS e a conexão será estabelecida.

Opção hipotética - o autor é banido permanentemente. Veja o perfil dele

Para resumir: primeiro você tem que fazer perguntas ao autor.

Obrigado

 
Vitaly Muzichenko #:

Difícil, eu gostaria de entregar algo já adequado. Ele está bem apenas visualizando níveis e movendo paradas para níveis passados, já é o suficiente. Não esperava tal captura. Se ele não tivesse estado ausente por muito tempo, eu o teria feito, mas não agora. Não quero arbitragens, já as tenho.

Oninit calcula níveis e sorteios. Para uma tarefa diferente, mas próxima. Sua parte é para os níveis Absolutos.

Zy, eu não tenho muito errado com isso, é claro. Preciso entender como as ordens, posições e arrasto são rastreadas, é fácil de desenhar, mas quando se chega a um nível, é preciso mudar a cor do nível, ou remover a linha horizontal.
Arquivos anexados:
 
Valeriy Yastremskiy #:

O OnInit calcula níveis e sorteios. Para uma tarefa diferente, mas lado a lado. Sua parte é para os níveis Absolutos.

Zy, eu certamente não tenho muito errado com isso. Preciso entender como as ordens, posições e arrasto são rastreadas, é fácil desenhar então. mas quando se atinge um nível, é preciso mudar a cor do nível, ou remover a linha horizontal.

O que poderia)))) precisar acrescentar bandeiras de gatilho para o funcionamento cruzado. não tem tempo.

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

O que eu poderia)))) precisa adicionar bandeiras de gatilho à função cruzada. não tem tempo.

É um pouco fora do comum.

Tenho um EA escrito há muito tempo, mas é um EA com indicação de onde as posições serão abertas


Agora preciso fazer um acréscimo no código da rede de arrasto para traçar tais linhas onde a rede de arrasto será acionada.

A tarefa é complicada pelo fato de que a rede de arrasto EA é definida em um único gráfico e as linhas devem ser desenhadas em todos os gráficos onde há posições abertas.

Arquivos anexados:
 
Vitaly Muzichenko #:

Isso é um pouco fora do comum.

Tenho um longo escrito como este, mas é um EA com uma indicação de onde as posições serão abertas


Agora precisamos fazer um acréscimo no código da rede de arrasto para traçar tais linhas onde a rede de arrasto será acionada.

A tarefa é complicada pelo fato de que a rede de arrasto EA é definida em um único gráfico e as linhas devem ser desenhadas em todos os gráficos onde há posições abertas.

Todas as janelas já estão abertas, ou elas são abertas pela EA à medida que surgem posições? O desafio é encontrar um gráfico)
 
Valeriy Yastremskiy #:
Todas as janelas já estão abertas, ou elas são abertas pela EA à medida que as posições surgem? O desafio é encontrar um gráfico)

Presumo que, se houver uma posição, a janela estará aberta.

 
Surgiu uma pergunta. Como saber o número de janelas abertas e suas identificações. Encontrei apenas a identificação da primeira, atual e próxima janela. Entendo corretamente que não podemos obter o total, mas apenas o primeiro, o não-extremo e como entender que não há próxima janela.
Razão: