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

 

Was ist los?

Es gibt eine Vorlagenklasse

template <typename T>
class MyList{
 private:
    T *array[];
    int _size;
public:
    WavesList(){
        _size = 0;
    }
    void add(T &obj){
        _size++;
        ArrayResize(array, _size, 0);
        array[_size-1] = obj;
    }
    void cut(){
        delete array[_size-1];
        _size--;
        ArrayResize(array, _size, 0);
    }
    int size(){
        return _size;
    }
    T lastWave(){
        return array[size-1];
    }
};

Im Code versuche ich dann, es so zu machen:

MyList myList<OtherClass>();

Er runzelt die Stirn!

 
Roman Sharanov:

Dann versuche ich, dies im Code zu tun:

Er runzelt die Stirn!

Ich brauche es so:

MyList<OtherClass> myList;

Hier ist ein Beispiel für die Arbeit mit Vorlagen, dasauf https://www.mql5.com/ru/forum/221917/page25#comment_11205772 veröffentlicht wurde.

sehen Sie, ob Sie meinen Code als Analogie zu Ihrem verwenden können

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2019.04.03
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Igor Makanu:

muss es so sein:

Hier ist ein Beispiel für die Arbeit mit den Vorlagen, die ich unterhttps://www.mql5.com/ru/forum/221917/page25#comment_11205772 veröffentlicht habe.

Versuchen Sie, meinen Code zu verwenden, um Ihren zu schreiben

Dankeschön

 

Ist es möglich, die Position des Textes relativ zur Zeile festzulegen?

Die Linie wird programmatisch erstellt, der Text wird oberhalb der Linie gezeichnet, aber in manchen Fällen brauche ich den Text am unteren Rand...


Wie ist dies zu tun?


void paintShLine(datetime sdata, datetime edata, double bev, string nm, string txt, color cl)
   {
      ObjectCreate(0, nm, OBJ_TREND, 0, sdata, bev, edata, bev);
       
      //--- установим цвет линии
      ObjectSetInteger(0,nm,OBJPROP_COLOR,cl);
      //--- установим стиль отображения линии
      ObjectSetInteger(0,nm,OBJPROP_STYLE,STYLE_DASH);
      //--- установим толщину линии
      ObjectSetInteger(0,nm,OBJPROP_WIDTH,1);
      //--- включим (true) или отключим (false) режим продолжения отображения линии вправо
      ObjectSetInteger(0,nm,OBJPROP_RAY_RIGHT,true);
      ObjectSetInteger(0,nm,OBJPROP_RAY,true);    
      //--- отобразим на переднем (false) или заднем (true) плане
      ObjectSetInteger(0,nm,OBJPROP_BACK,true);
      //--- включим (true) или отключим (false) режим перемещения линии мышью
      ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
      //--- установим текст
      if (showShadowText) ObjectSetString(0,nm,OBJPROP_TEXT,"  "+txt);
      //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
      ObjectSetInteger(0,nm,OBJPROP_HIDDEN,true);
 }
 
Guten Tag,
Ich möchte es so einrichten, dass beim Öffnen eines Kaufgeschäfts der Berater das Handelslot des geöffneten Geschäfts mit dem maximalen Handelslot vergleicht, und wenn das Lot über einem bestimmten Wert liegt, schließt der Berater das letzte Geschäft automatisch.

Im Beispiel unten habe ich angegeben, dass der Berater die Geschäfte schließt, wenn das Handelslot über 2... Wie wird diese Bedingung Ihrer Meinung nach funktionieren?

if ((typeLastOrder==OP_BUY && orderlots()>2 || typeLastOrder==OP_BUYSTOP && orderlots()>2 || typeLastOrder==OP_BUYLIMIT && orderlots()>2)){
Alert("kein Los größer als 2 ist erlaubt");
CloseDelete(lastTicket);
return;
}
 
Konstantins Korolkovs:
Nachmittags,
Ich möchte, dass der Expert Advisor das Handelsvolumen des eröffneten Handels mit dem maximalen Handelsvolumen vergleicht, und wenn das Volumen über einem bestimmten Wert liegt, schließt der Expert Advisor automatisch den letzten Handel.

Im folgenden Beispiel habe ich festgelegt, dass der Expert Advisor Geschäfte schließen soll, wenn das Handelslot größer als 2 ist. Wie wird diese Bedingung Ihrer Meinung nach funktionieren?

if ((typeLastOrder==OP_BUY && orderlots()>2 || typeLastOrder==OP_BUYSTOP && orderlots()>2 || typeLastOrder==OP_BUYLIMIT && orderlots()>2)){
Alert("Partie größer als 2 darf nicht verwendet werden");
CloseDelete(lastTicket);
Rückkehr;
}

Und warum sollte ich sie öffnen und dann gleich wieder schließen? Vielleicht ist es besser, sie gar nicht zu öffnen?

 
Alexey Viktorov:

Warum erst öffnen und dann sofort schließen? Wäre es nicht besser, sie gar nicht zu öffnen?

Ihre Gier kontrollieren

 

Hilfe verschieben links, rechts oder horizontal die Tick-Nummern auf der Oberseite der Kerzen als rot, grün, gelb sind selten. Diese Zahlen bewegen sich vertikal, aber ich kann sie nicht horizontal bewegen. Ich möchte, dass sie vor der Kerze stehen, zu der sie gehören. Der Code des Indikators:


//+------------------------------------------------------------------+

//| Fine volumes.mq4 |
// eevviill |
//| itisallillusion@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Aliev"
#property link "businessystems.ru"

#property indicator_separate_window
#property indicator_minimum 0
#Eigenschaft indicator_buffers 6

#Eigenschaft indicator_width1 2
#property indicator_width2 2
#Eigenschaft indicator_width3 2
#Eigenschaft indicator_width4 4
#Eigenschaft indicator_width5 4

#property indicator_color1 SkyBlue
#property indicator_color2 Kastanienbraun
#property indicator_color3 Gelb
#Eigenschaft indicator_color4 Blau
#property indicator_color5 Rot



extern int BarsToCount = 400;

externer String pus1 = "";
externer String p_s = "Punkteeinstellungen";
extern bool use_points = true;
extern int distance_point = 80;
extern color color_point_u = Lime;
extern color color_point_d = Red;
extern color color_point_s = Gelb;
extern int size_point = 6;

externer String pus2 = "";
externer String s_w = "Way";
extern bool use_show_same_way = true;
extern bool use_show_daily_way = true;

externer String pus3 = "";
externer String al = "Alerts";
extern bool use_alerts = false;
extern string up_alert = "Up";
extern string down_alert = "Down";




double up[];
double down[];
double mid[];
double up2[];
double down2[];
double none[];

static int prevtime = 0;

///////////////////////////////////////
int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,up);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,down);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexBuffer(2,mid);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexBuffer(3,up2);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexBuffer(4,down2);
SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5,keine);


IndicatorShortName("Aliev FX Volumes");


zurück(0);
}

///////////////////////////////////////
int deinit()
{
string name_de;
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0);
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
zurück(0);
}


//////////////////////////////////////////
int start()
{
////////////
up[0]=EMPTY_VALUE;
down[0]=EMPTY_VALUE;
mid[0]=EMPTY_VALUE;
if(Close[0]>Open[0]) up[0]=Volume[0];
if(Close[0]<Open[0]) down[0]=Volume[0];
if(Close[0]==Open[0]) mid[0]=Volume[0];

////////////////
if(use_points)
Ob_cre(0);

if(!use_points)
Ob_del(0);
////////
if(use_show_daily_way)
Ob_cre2();
if(!use_show_daily_way)
Ob_del2();

////////////
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
///////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
////////////
if(use_points)
Ob_cre(c);

if(!use_points)
Ob_del(c);
////////////
up[c]=EMPTY_VALUE;
down[c]=EMPTY_VALUE;
mid[c]=EMPTY_VALUE;
up2[c]=EMPTY_VALUE;
down2[c]=EMPTY_VALUE;




/////////////////
if(Close[c]>Open[c]) up[c]=Volume[c];
if(Close[c]<Open[c]) down[c]=Volume[c];
if(Close[c]==Open[c]) mid[c]=Volume[c];
none[c]=Volume[c]+Volume[c]/6;


//////////////
if(use_show_same_way)
{

if(Schließen[c]>Öffnen[c] && Schließen[c+1]>Öffnen[c+1])
{
up2[c]=Volume[c]; up2[c+1]=Volume[c+1];
up[c]=EMPTY_VALUE; up[c+1]=EMPTY_VALUE;
}

if(Schließen[c]<Öffnen[c] && Schließen[c+1]<Öffnen[c+1])
{
down2[c]=Volume[c]; down2[c+1]=Volume[c+1];
down[c]=EMPTY_VALUE; down[c+1]=EMPTY_VALUE;
}

}


if(use_alerts)
{
if(up2[1]!=EMPTY_VALUE && up2[4]==EMPTY_VALUE) Alert(up_alert);
if(down2[1]!=EMPTY_VALUE && down2[4]==EMPTY_VALUE) Alert(down_alert);
}



}
zurück(0);
}
//func
//+------------------------------------------------------------------+///////////////////////////////
void Ob_cre(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0);

Farbe col_po;
if(Close[num_of_bar]>Open[num_of_bar]) col_po=color_point_u;
if(Close[num_of_bar]<Open[num_of_bar]) col_po=color_point_d;
if(Close[num_of_bar]==Open[num_of_bar]) col_po=color_point_s;

if(ObjectFind(name)==-1)
{
ObjectCreate(Name,OBJ_TEXT,0,0)
}
ObjectSet(name,OBJPROP_TIME1,Time[num_of_bar]);
ObjectSet(name,OBJPROP_PRICE1,High[num_of_bar]+distance_point*Point);
ObjectSet(name,OBJPROP_ANGLE,90);
ObjectSetText(name,DoubleToStr(Volume[num_of_bar],0),size_point, "Arrial",col_po);


}

/////////////////////////////////////////
void Ob_cre2()
{
int Num_of_win = WindowFind("Aliev FX Volumes");

if(ObjectFind("D_w")==-1)
{
ObjectCreate("D_w",OBJ_LABEL,Num_of_win,0,0);
ObjectSet("D_w",OBJPROP_CORNER,1);
ObjectSet("D_w",OBJPROP_XDISTANCE,20);
ObjectSet("D_w",OBJPROP_YDISTANCE,20);
ObjectSetText("D_w", "Tagesvolumen",10, "Arrial",White);
}


if(ObjectFind("D_w_v")==-1)
{
ObjectCreate("D_w_v",OBJ_LABEL,Num_of_win,0,0);
ObjectSet("D_w_v",OBJPROP_CORNER,1);
ObjectSet("D_w_v",OBJPROP_XDISTANCE,20);
ObjectSet("D_w_v",OBJPROP_YDISTANCE,45);
}
Farbe vol_col;
if(iClose(Symbol(),PERIOD_D1,0)>iOpen(Symbol(),PERIOD_D1,0)) vol_col=Lime;
if(iClose(Symbol(),PERIOD_D1,0)<iOpen(Symbol(),PERIOD_D1,0)) vol_col=OrangeRed;

ObjectSetText("D_w_v",DoubleToStr(iVolume(Symbol(),PERIOD_D1,0),0),12, "Arrial",vol_col);


}

/////////////////////////////////////////////////////////////////
void Ob_del(int num_of_bar)
{
string name="vol_"+DoubleToStr(num_of_bar,0);

if(ObjectFind(name)!=-1)
{
ObjectDelete(name);
}


}

/////////////////////////////////////////
void Ob_del2()
{
if(ObjectFind("D_w")!=-1)
ObjectDelete("D_w");


if(ObjectFind("D_w_v")!=-1)
ObjectDelete("D_w_v");



}
 
koctja:

Hilfe verschieben links, rechts oder horizontal die Tick-Nummern auf der Oberseite der Kerzen als rot, grün, gelb sind selten. Diese Zahlen bewegen sich vertikal, aber ich kann sie nicht horizontal bewegen. Ich möchte, dass sie vor der Kerze stehen, zu der sie gehören. Der Code des Indikators:


Ich würde in solchen Fällen einfach ein Leerzeichen vor die Zahl setzen (wenn ich horizontal drucke)...
 
koctja:

Hilfe verschieben links, rechts oder horizontal die Tick-Nummern auf der Oberseite der Kerzen als rot, grün, gelb sind selten. Diese Zahlen bewegen sich vertikal, aber ich kann sie nicht horizontal bewegen. Ich möchte, dass sie vor der Kerze stehen, zu der sie gehören. Der Code des Indikators:

Versuchen Sie,den Ankerpunkt für dasOBJ_TEXT-Objekt in der


ANCHOR_CENTER

Der Ankerpunkt liegt genau in der Objektmitte


ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_CENTER);
Grund der Beschwerde: