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

 
Aleksandr Kononov #:
Gibt es eine Möglichkeit, den Speicher zu überprüfen? Wie wird es konsumiert oder so?

Sagen wir, Sie können den Speicher beeinflussen und es werden 200 Indikatoren berechnet, aber nach einer Woche werden Sie sich fragen, warum 1000 Indikatoren nicht geladen sind... usw... Teufelskreis... Die richtigen Aufgaben stellen...

 
Nikolay Ivanov #:

der aufgehängte Code kann nirgendwo angewendet werden... Sie müssen die Aufgaben festlegen, die erledigt werden können... Und es ist einfacher, den Code zu vermasseln... Die Indikatoren müssen schnell arbeiten, und es bleibt keine Zeit für überlange Berechnungen.

Ich wünschte, ich wüsste die Grenzen, innerhalb derer etwas geschaffen werden kann. Zumal ich überhaupt kein Programmierer bin, ich wüsste nicht, wie ich damit umgehen sollte. Nun, ich werde nach etwas zu lesen suchen

 
Aleksandr Kononov #:

Ich wünschte, ich wüsste den Rahmen, in dem ich etwas schaffen könnte. Für einen Anfänger ist es schwer zu verstehen, zumal ich überhaupt kein Programmierer bin. OK, ich werde sehen, was ich lesen kann.

Normalerweise brauchen Sie nur eine CCI, maximal 3 :) Und Sie haben 200... Ich stimme zu, dass es schwierig ist, die Grenzen nicht zu überschreiten, man braucht Erfahrung, um die richtige, machbare Aufgabe zu stellen, die in einer angemessenen Zeit erfolgreich abgeschlossen werden kann - es ist schwierig. Wenn Sie also Ratschläge brauchen, wo Sie graben sollen, sollten Sie sich auf die Optimierung und Minimierung von Ideen konzentrieren... Zum Beispiel CCI mit Periode 20 und CCI mit Periode 21... fast das Gleiche und es macht keinen Sinn, beide zu berechnen. Je höher die Periode, desto weniger Effekt, Sie müssen eine vernünftige Zahl finden. Eine schöne Lösung funktioniert immer schnell.

 
Nikolay Ivanov #:

Nun, eine CCI reicht normalerweise aus, höchstens 3 :) und Sie haben 200... Ich stimme mit Ihnen überein, dass es schwierig ist, innerhalb der Grenzen zu bleiben... man braucht Erfahrung, es ist schwer, die richtige, erreichbare Aufgabe zu stellen, die in einem angemessenen Zeitraum erfolgreich abgeschlossen werden kann. Wenn Sie also Ratschläge brauchen, wo Sie graben sollen, sollten Sie sich auf die Optimierung und Minimierung von Ideen konzentrieren... Zum Beispiel CCI mit Periode 20 und CCI mit Periode 21... fast das Gleiche und es macht keinen Sinn, beide zu berechnen. Je höher die Periode, desto weniger Effekt, Sie müssen eine vernünftige Zahl finden. Eine schöne Lösung funktioniert immer schnell.

Soweit ich weiß, hilft der Profiler bei der Messung des Speicherverbrauchs. Wir werden sie also optimieren). Wie dem auch sei, wenn jemand weiß, wo man darüber lesen kann, schickt mir bitte den Link...

 

Hallo zusammen!

Was sollte dem Code hinzugefügt werden, um den MA nicht nur nach vorne (positiver Wert), sondern auch nach hinten (negativer Wert) zu verschieben?

Hier ist der Code des Expert Advisors:

// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input int     StopLoss      = 30;     // Стоп (SL)
input int     TakeProfit    = 30;     // Тейк (TP)
input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input double  K_Martin1     = 0.01;    // Множитель мартин 1
input double  K_Martin2     = 1.9;    // Множитель мартин 2
input double  K_Martin3     = 1.4;    // Множитель мартин 3
input int     OrdersClose   = 3;      // Ограничение лотности мартин1
input int     OrdersClose2  = 5;      // Ограничение лотности мартин2
input int     DigitsLot     = 2;      // Точность лотности
// Параметры индикатора
input string  sParametersMA = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
Start          = TimeCurrent();
MaxMartinLot   = Lot*MathPow(1.4,OrdersClose);
MaxMartinLot2  = Lot*MathPow(K_Martin2,OrdersClose2);
int Y          = 15;
DrawLABEL("nextlot",1,5,Y,clrLime,""); 
Y += 20;
DrawLABEL("currentlot",1,5,Y,clrLime,"");
Y += 30;
return(INIT_SUCCEEDED);
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Пишем какой лот текущий и какой следующий
      DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
      DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
 
   }
 
законопослушный гражданин #:

Hallo zusammen!

Was sollte dem Code hinzugefügt werden, um den MA nicht nur nach vorne (positiver Wert), sondern auch nach hinten (negativer Wert) zu verschieben?

Hier ist der Code des Expert Advisors:

Fügen Sie der Verschiebung den gewünschten negativen Wert hinzu, wobei der Wert + Verschiebung nicht kleiner als Null sein sollte.

 
ALEKSANDR SOKOLOV #:

Addieren Sie den gewünschten negativen Wert zur Verschiebung, aber stellen Sie sicher, dass der Wert + Verschiebung mindestens Null ist.

Danke, ich werde es ausprobieren.

 

Guten Tag.

Hilfe mit dem Code, vielleicht gibt es Beispiele.
Aufgabe:

Es gibt mehrere offene Aufträge mit unterschiedlichen Losen und in unterschiedlichen Richtungen. Einer von ihnen ist mit Gewinn begraben, nehmen wir an, es sind 20. Es gibt jedoch einen offenen Auftrag mit einem negativen Gewinn, nehmen wir an -55 mit 0,05 Lots. Ich möchte einen Teil einer negativen Order um den Betrag des Gewinns einer positiv geschlossenen Order schließen, um den Drawdown zu verringern.

Ich habe versucht, dies mit dem while-Operator zu schreiben, aber es hat nicht geklappt.

Ich danke Ihnen im Voraus.

 

Hallo, dieser Code ist aus dem Buch von Fedoseev. Warum wird der Indikator nicht im Fenster gezeichnet, das Log sagt, dass er läuft, keine Fehler beim Kompilieren, ein zusätzliches Fenster öffnet sich (leer), dieser Code ist aus dem Buch, bei mir ist genau das gleiche Ergebnis. Was ist los?

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

//| 015 Symbol.mq5 |

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

#eigentum copyright "Dmitry Fedoseev"

#property link "mailto:for-good-letter@yandex.ru"

#Eigenschaft Version "1.00"

#property indicator_separate_window

#Eigenschaft indicator_buffers 4

#property indicator_plots 1

//--- Balken zeichnen

#property indicator_label1 "bar"

#property indicator_type1 DRAW_CANDLES

#property indicator_color1 clrGray,clrBlue,clrRed

#property indicator_style1 STYLE_SOLID

#Eigenschaft indicator_width1 1

//--- Eingabeparameter


Eingabezeichenfolge symbol="";

Eingabe bool drawBars=false;


Zeichenfolge sym;


//--- Indikatorpuffer

double barBuffer1[];

double barBuffer2[];

double barBuffer3[];

double barBuffer4[];

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

//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |

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

int OnInit()

{

sym=Symbol;

StringTrimLeft(sym);

StringTrimRight(sym);

if(sym==""){

sym=Symbol();

}

if(!SymbolSelect(sym,true)){

Alert("Unbekanntes Symbol ",sym);

return(INIT_FAILED);

}

if(drawBars){

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);

}

sonst{

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);

}

//--- Zuordnung von Indikatorpuffern

SetIndexPuffer(0,barPuffer1,INDICATOR_DATA);

SetIndexPuffer(1,barPuffer2,INDICATOR_DATA);

SetIndexPuffer(2,barPuffer3,INDICATOR_DATA);

SetIndexPuffer(3,barPuffer4,INDICATOR_DATA);

//---

return(INIT_SUCCEEDED);

}


void OnDeinit(const int r){

Kommentar(");

EventKillTimer();

}

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

//| Benutzerdefinierte Indikator-Iterationsfunktion |

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

int OnCalculate(const int rates_total,

const int prev_calculated,

const datetime &time[],

const double &open[],

const double &high[],

const double &low[],

const double &close[],

const long &tick_volume[],

const long &Volumen[],

const int &spread[])

{

int bars=Bars(sym,Period());

if(bars==0){

Comment("Zeitrahmen bilden ",sym,"...");

EventSetTimer(1);

zurück(0);

}

int start;

if(prev_calculated==0){

Kommentar(");

EventKillTimer();

datetime tm[1];

if(CopyTime(sym,Period(),bars-1,1,tm)==-1){

zurück(0);

}

Start=0;

for(;start<rates_total;start++){

if(time[start]>=tm[0]){

Pause;

}

}

}

sonst{

start=prev_calculated-1;

}

MqlRates r[1];

for(int i=start;i<rates_total;i++){

if(CopyRates(sym,Period(),time[i],1,r)==-1){

zurück(0);

}

barBuffer1[i]=r[0].open;

barBuffer2[i]=r[0].high;

barBuffer3[i]=r[0].low;

barBuffer4[i]=r[0].close;

}

return(rates_total);

}


void OnTimer()

{

ChartSetSymbolPeriod(0,Symbol(),Period());

}


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

Dateien:
 
MatveySt #:

Hallo, dieser Code ist aus dem Buch von Fedoseev. Warum wird der Indikator nicht im Fenster gezeichnet, das Log sagt, dass er läuft, keine Fehler beim Kompilieren, ein zusätzliches Fenster öffnet sich (leer), dieser Code ist aus dem Buch, bei mir ist genau das gleiche Ergebnis. Was ist los?


Alt s den Code einfügen.

Und wenn Sie den Induktor gießen, geben Sie dann das Werkzeug ein?

Grund der Beschwerde: