Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 182
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Und Sie haben nicht ein einziges Stück Ihres Codes gezeigt - es ist nicht klar, warum Sie ein Beispiel zeigen.
struct p{
double trailingProfit;
int orders[10];
bool flagOpen;// флаг , указывающий на открытость позиции
//тут еще куча связанных параметров
};
p order[];
int OrderN=-1;
int OnInit()
{
ArrayResize(pair,1,1000);
return(INIT_SUCCEEDED);
}
void openOrder(price){
OrderN++;
int t;
ArrayResize(orders,order+1);
t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);
for(intj=0,j<10,++j){
if(orders[OrderN].orders==0) orders[OrderN].orders=t;
break;
}
orders[OrderN].flagOpen=1;
}
//...... тут идет обработка позиций...
void massCut(){
// нужна вот такая функция
}
Was passiert mit dem Array von Strukturen, wenn der EA neu gestartet wird?
Was passiert mit dem Struktur-Array, wenn der EA neu gestartet wird?
Das Array wird gelöscht, dieses Problem wurde nicht gelöst.
Dort. Und das hätte von vornherein bedacht werden müssen.
Die Schlussfolgerung liegt auf der Hand: Das Array muss auf Null gesetzt und mit dem aktuellen Stand der Aufträge und Positionen neu aufgefüllt werden. Dies sollte jedoch nur dann geschehen, wenn sich die Anzahl der Aufträge oder Positionen auf dem Konto ändert.
Sie haben immer nur den aktuellen Stand der Aufträge und Positionen zur Hand und müssen sich nicht darum kümmern, nicht existierende Aufträge/Positionen aus dem Array zu eliminieren. Und die Liste der Aufträge/Positionen muss vollständig oder für einen bestimmten Zeitraum durchgeblättert werden, aber nur in bestimmten Fällen - wenn sich die Anzahl der Aufträge/Positionen im Konto ändert.
Warum brauchen Sie eine solche Perversion?
Damit OnInit nicht bei jeder Neuinitialisierung spinnt und das statische Array auf eine einzige Instanz reduziert, weil es an einigen Stellen doppelt geschrieben wird... im Allgemeinen ist dies eine Ressourcenoptimierung
... Ich werde es so lassen, wie es ist, es ist im Moment einfacher
Sie deklarieren ein globales Array ohne Angabe einer Größe. Ihre Funktion setzt ihre Größe mit ArrayResize. Und es ist global sichtbar, und OnInit ist freigegeben...
Nicht ganz richtig, das Array ist statisch mit klar definierten Werten, es macht keinen Sinn, es separat zu initialisieren(
um zu verhindern, dass OnInit bei jeder Neuinitialisierung durchdreht und um das statische Array auf eine Instanz zu reduzieren, da es an einigen Stellen doppelt geschrieben wird... im Allgemeinen ist dies eine Ressourcenoptimierung
... Ich werde es so lassen, wie es jetzt ist.
Werden die Provisionen im MT4-Tester nicht berücksichtigt?
Frage zu der Funktion Print(); wie kann man Print() dazu bringen, die Daten plus das Datum (Tag) im EA zu drucken? Helfen Sie einem Anfänger, die plz zu verstehen, setzen Sie den Code neu gemacht für die Zwecke des Experiments, induke "pivot" vorher cbs!
den Code selbst: PivotsDaily v2.mq4
#property indicator_chart_window
#Eigenschaft indicator_buffers 3
#Eigenschaft indicator_color1 Lime
#Eigenschaft indicator_color2 Blau
#property indicator_color3 Rot
//---- Eingabeparameter
extern inttern CountBars=300;
//---- Puffer
double PBuffer[];
double S1Buffer[];
double R1Puffer[];
string Pivot="P", Sup1="S 1", Res1="R 1";
int fontsize=10;
double P,S1,R1,S2,R2,S3,R3;
double LastHigh,LastLow,x;
//+------------------------------------------------------------------+
//| Funktion zur Deinitialisierung des Custor-Indikators |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot");
ObjectDelete("S1");
ObjectDelete("R1");
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
string kurz_name;
IndikatorPuffer(7);
//---- Indikatorzeile
SetIndexStyle(0,DRAW_ARROW,2,1,Lime);
SetIndexPfeil(0,158);
SetIndexStyle(1,DRAW_ARROW,2,1,Blue);
SetIndexPfeil(1,158);
SetIndexStyle(2,DRAW_ARROW,2,1,Red);
SetIndexPfeil(2,158);
SetIndexPuffer(0,PBuffer);
SetIndexPuffer(1,S1Puffer);
SetIndexBuffer(2,R1Buffer);
//---- Name für das Datenfenster und die Bezeichnung des Unterfensters des Indikators
short_name="Pivot";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
short_name="R1";
IndicatorShortName(short_name);
SetIndexLabel(2,short_name);
short_name="S1";
IndicatorShortName(short_name);
SetIndexLabel(1,short_name);
SetIndexDrawBegin(0,6);
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int Grenze, i;
//---- Indikatorberechnung
if (gezählte_Balken==0)
{
x=Periode();
if (x>CountBars) return(-1);
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("Pivot", " Pivot",10, "Arial",Lime);
ObjectCreate("S1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("S1", " S1",10, "Arial",Blue);
ObjectCreate("R1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("R1", " R1",10, "Arial",Red);
}
if(counted_bars<0) return(-1);
limit=(Balken-gezählte_Balken)-1;
for (i=limit; i>=0;i--)
{
if (TimeDayOfWeek(Time[i]) != 0)
{
if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];
}
wenn (
TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0
)
{
P=Schließen[i+1];
R1 = LastLow;
S1 = LastHigh;
S2=High[i]-Low[i];
S3=High[i]-Open[i+1];
if(S3==0)
{R2 = S3;} sonst {R2 = S2/S3;}
Print("R2 ",R2); // <= Wie bekomme ich den Drucker plus die Daten dazu, das Datum zu drucken?
LastLow=Open[i]; LastHigh=Open[i];
ObjectMove("Pivot", 0, Time[i],P);
ObjectMove("S1", 0, Time[i],S1);
ObjectMove("R1", 0, Time[i],R1);
}
PBuffer[i]=P;
S1Puffer[i]=S1;
R1Puffer[i]=R1;
}
//----
zurück(0);
}