Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1928

 
Valeriy Yastremskiy #:
Der Algorithmus "berührt/gekreuzt/verschoben" funktioniert nicht?

Schwierig, ich möchte schon etwas Passendes einreichen. Es reicht ihm, wenn er die Ebenen visualisiert und die Haltestellen zu den vergangenen Ebenen verschiebt, das reicht. Mit so einem Fang habe ich nicht gerechnet. Wenn er nicht schon lange weg gewesen wäre, hätte ich es getan, aber nicht jetzt. Ich will keine Arbitrage, ich habe sie bereits.

 

wenn step:=:const, dann werden einfach die Levels mit dem angegebenen Step ab dem aktuellen Stop Loss angezeigt. Was könnte einfacher sein als das.

 
Maxim Kuznetsov #:

wenn step:=:const, dann werden einfach die Levels mit dem angegebenen Step ab dem aktuellen Stop Loss angezeigt. Was könnte einfacher sein als das.

Ja Algorithmus ich verstehe. Öffnen Sie ein Fenster und schreiben Sie auf, was los ist? Etwas andere Bedingungen, um sich zu vertiefen und zu schreiben.

P.S.: Unter anderen Umständen würde ich nicht fragen.

 
Bitte beraten Sie, wer weiß, ich kann nicht öffnen, eine Bestellung auf der Demo-Version schreibt, dass es mit einem allgemeinen Fehler in der Warteschlange ist! Was ist das Problem?
 
Maxim Kuznetsov #:

höchstwahrscheinlich - ex4 wurde mit einem alten Compiler erstellt. Das Terminal wurde aktualisiert, aber der EA ist ein altes Waisenkind. Wir müssen den Autor kontaktieren

Die zweite Möglichkeit: Die Signaturen stimmen nicht überein (oder wurden aus technischen Gründen nicht überprüft). Sie brauchen nur zu warten, bis DNS aktualisiert wird, und schon ist die Verbindung hergestellt.

Hypothetische Option - der Autor wird dauerhaft gesperrt. Sehen Sie sich sein Profil an

Zusammenfassend lässt sich sagen, dass man dem Autor zunächst Fragen stellen muss.

Dankeschön

 
Vitaly Muzichenko #:

Schwierig, ich möchte schon etwas Passendes einreichen. Es reicht ihm, wenn er die Ebenen visualisiert und die Haltestellen zu den vergangenen Ebenen verschiebt, das reicht. Mit so einem Fang habe ich nicht gerechnet. Wenn er nicht schon lange weg gewesen wäre, hätte ich es getan, aber nicht jetzt. Ich will keine Arbitrage, ich habe sie bereits.

Oninit berechnet die Pegel und zeichnet. Für eine andere Aufgabe, aber in der Nähe. Ihr Teil ist für Absolute Levels.

Zy, ich habe natürlich nicht viel daran auszusetzen. Ich muss verstehen, wie Aufträge, Positionen und Schleppnetze verfolgt werden. Es ist einfach zu zeichnen, aber wenn man ein Level erreicht, muss man entweder die Farbe des Levels ändern oder die horizontale Linie entfernen.
Dateien:
 
Valeriy Yastremskiy #:

OnInit berechnet die Pegel und zeichnet. Für eine andere Aufgabe, aber Seite an Seite. Ihr Teil ist für Absolute Levels.

Zy, ich habe sicherlich nicht viel daran auszusetzen. Ich muss verstehen, wie Aufträge, Positionen und Schleppnetze verfolgt werden, dann ist es einfach zu zeichnen. Aber wenn man ein Level erreicht, muss man entweder die Farbe des Levels ändern oder die horizontale Linie entfernen.

Was könnte)))) brauchen, um Trigger-Flags zu crossfunction hinzuzufügen. habe keine Zeit.

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

Was ich könnte))) müssen Trigger-Flags zu der Querfunktion hinzufügen. haben keine Zeit.

Das ist ein bisschen weit hergeholt.

Ich habe einen EA vor langer Zeit geschrieben, aber es ist ein EA mit Anzeige, wo die Positionen geöffnet werden


Nun muss ich im Schleppnetzcode eine Ergänzung vornehmen, um solche Linien zu zeichnen, bei denen das Schleppnetz ausgelöst wird.

Die Aufgabe wird dadurch erschwert, dass der Schleppnetz-EA auf einer Karte eingestellt ist und auf allen Karten, auf denen es offene Positionen gibt, Linien gezeichnet werden sollen.

Dateien:
 
Vitaly Muzichenko #:

Das ist ein bisschen weit hergeholt.

Ich habe eine lange geschrieben, wie diese, aber es ist ein EA mit einer Anzeige, wo die Positionen geöffnet werden


Nun müssen wir im Code des Schleppnetzes eine Ergänzung vornehmen, um solche Linien zu zeichnen, bei denen das Schleppnetz ausgelöst wird.

Die Aufgabe wird dadurch erschwert, dass der Schleppnetz-EA auf einer Karte eingestellt ist und auf allen Karten, auf denen es offene Positionen gibt, Linien gezeichnet werden sollen.

Sind alle Fenster bereits geöffnet, oder werden sie vom EA geöffnet, wenn sich Positionen ergeben? Die Herausforderung besteht darin, eine Tabelle zu finden)
 
Valeriy Yastremskiy #:
Sind alle Fenster bereits geöffnet, oder werden sie vom EA geöffnet, wenn Positionen entstehen? Die Herausforderung besteht darin, eine Tabelle zu finden)

Ich gehe davon aus, dass, wenn es eine Stelle gibt, das Fenster offen ist.