Sie scheinen umfassende Antworten und Beispiele erhalten zu haben, aber Sie müssen dennoch die Hilfe lesen, um zu verstehen, wie Funktionen aufgerufen werden und warum der statische Modifikator verwendet wird.
Hier ist ein anderer Weg, vielleicht ist er für Sie leichter zu verstehen:
int N(bool reset=false) // если вызываем N() то возвращает следующее значение n++, при первом вызове n=0, но вернет 1, т.к. n=0, а затем n++, если нужно 0 то
// или staticint n=-1; или вызывайте сначала N(true)
{ // если вызываем N(true), то сбрасываем n=0 и возвращзаем 0staticint n=0;
if(reset) n=0; else n++;
return n;
}
Sie scheinen umfassende Antworten und Beispiele erhalten zu haben, aber Sie müssen noch die Hilfe lesen, um zu verstehen, wie Funktionen aufgerufen werden und warum der statische Modifikator verwendet wird.
Hier ist eine weitere Variante, vielleicht wird es dadurch für Sie leichter verständlich:
Das erste Beispiel zeigt einen Funktionsaufruf, bei dem keine Position eingenommen wird und das zurückgegebene Ergebnis verglichen wird.
if( ((OpenB-Ask)/ma+TimeB/60) > N() )
Deshalb könnte es eine gute Idee sein, eine einfache Rückgabe ohne Nullstellung und Addition durchzuführen. Diese habe ich in 2 Varianten umgesetzt
//+------------------------------------------------------------------+//| elliotbutton.mq4 |//| Copyright 2018, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
ButtonCreate();
ButtonCreate(0,"ButtonMinor",0,10,60,50,50,CORNER_LEFT_UPPER,"(i)","Arial",12,clrBlack, C'236,233,216',clrNONE,false,false,false,false,0);
return(INIT_SUCCEEDED);
}
voidOnTick()
{
}
voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
if (ObjectGetInteger(0,"Button",OBJPROP_STATE,0)==true)
{
int x =(int)lparam;
int y =(int)dparam;
datetime dt =0;
double price =0;
int window=0;
if(ChartXYToTimePrice(0,x,y,window,dt,price))
{
PrintFormat("Window=%d X=%d Y=%d => Time=%s Price=%G",window,x,y,TimeToString(dt),price);
if(ChartTimePriceToXY(0,window,dt,price,x,y))
PrintFormat("Time=%s Price=%G => X=%d Y=%d",TimeToString(dt),price,x,y);
ChartRedraw(0);
}
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"i","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"ii","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"iii","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"iv","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"v","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
ObjectSetInteger(0,"Button",OBJPROP_STATE,False);
}
if (ObjectGetInteger(0,"ButtonMinor",OBJPROP_STATE,0)==true)
{
int x =(int)lparam;
int y =(int)dparam;
datetime dt =0;
double price =0;
int window=0;
if(ChartXYToTimePrice(0,x,y,window,dt,price))
{
PrintFormat("Window=%d X=%d Y=%d => Time=%s Price=%G",window,x,y,TimeToString(dt),price);
if(ChartTimePriceToXY(0,window,dt,price,x,y))
PrintFormat("Time=%s Price=%G => X=%d Y=%d",TimeToString(dt),price,x,y);
ChartRedraw(0);
}
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(i)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(ii)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(iii)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(iv)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(v)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
ObjectSetInteger(0,"ButtonMinor",OBJPROP_STATE,False);
}
}
voidOnDeinit(constint reason)
{
ObjectDelete(0,"Button");
ObjectDelete(0,"ButtonMinor");
}
bool ButtonCreate(constlong chart_ID=0, // ID графика conststring name="Button", // имя кнопки constint sub_window=0, // номер подокна constint x=10, // координата по оси X constint y=10, // координата по оси Y constint width=50, // ширина кнопки constint height=50, // высота кнопки constENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки conststring text="i", // текст conststring font="Arial", // шрифт constint font_size=10, // размер шрифта constcolor clr=clrBlack, // цвет текста constcolor back_clr=C'236,233,216', // цвет фона constcolor border_clr=clrNONE, // цвет границы constbool state=false, // нажата/отжата constbool back=false, // на заднем плане constbool selection=false, // выделить для перемещений constbool hidden=false, // скрыт в списке объектов constlong z_order=0) // приоритет на нажатие мышью
{
ResetLastError();
if(ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
}
return(true);
}
bool TextCreate(constlong chart_ID=0, // ID графика conststring name="Text", // имя объекта constint sub_window=0, // номер подокна datetime time=0, // время точки привязки double price=0, // цена точки привязки conststring text="Text", // сам текст conststring font="Arial", // шрифт constint font_size=10, // размер шрифта constcolor clr=clrBlack, // цвет constdouble angle=0.0, // наклон текста constENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки constbool back=false, // на заднем плане constbool selection=true, // выделить для перемещений constbool hidden=true, // скрыт в списке объектов constlong z_order=0) // приоритет на нажатие мышью
{
ResetLastError();
if(ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))
{
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
}
return(true);
}
einen EA schreiben, der, wenn ich auf die Schaltfläche klicke, einen Text an der Stelle im Diagramm erstellt, die von der Maus angezeigt wird. Jetzt erstellt mein Expert Advisor nur noch Text anstelle der Schaltfläche.
Hallo, wie kann ich erreichen, dass beim manuellen Ziehen und Ablegen einer schwebenden Buystop-Order die andere schwebende Sellstop-Order mitbewegt wird?
Wie kann ich das eine mit dem anderen verbinden, so dass, wenn ich das eine bewege, beide auf einmal bewegt werden?
Wer kann noch helfen?)
Sie scheinen umfassende Antworten und Beispiele erhalten zu haben, aber Sie müssen dennoch die Hilfe lesen, um zu verstehen, wie Funktionen aufgerufen werden und warum der statische Modifikator verwendet wird.
Hier ist ein anderer Weg, vielleicht ist er für Sie leichter zu verstehen:
Sie scheinen umfassende Antworten und Beispiele erhalten zu haben, aber Sie müssen noch die Hilfe lesen, um zu verstehen, wie Funktionen aufgerufen werden und warum der statische Modifikator verwendet wird.
Hier ist eine weitere Variante, vielleicht wird es dadurch für Sie leichter verständlich:
Das erste Beispiel zeigt einen Funktionsaufruf, bei dem keine Position eingenommen wird und das zurückgegebene Ergebnis verglichen wird.
Deshalb könnte es eine gute Idee sein, eine einfache Rückgabe ohne Nullstellung und Addition durchzuführen. Diese habe ich in 2 Varianten umgesetzt
einen EA schreiben, der, wenn ich auf die Schaltfläche klicke, einen Text an der Stelle im Diagramm erstellt, die von der Maus angezeigt wird. Jetzt erstellt mein Expert Advisor nur noch Text anstelle der Schaltfläche.
Hallo, wie kann ich erreichen, dass beim manuellen Ziehen und Ablegen einer schwebenden Buystop-Order die andere schwebende Sellstop-Order mitbewegt wird?
Wie kann ich das eine mit dem anderen verbinden, so dass, wenn ich das eine bewege, beide auf einmal bewegt werden?
Warum Spam?
Warum Spam?
Schreiben Sie Ihre eigenen Ticks und geben Sie sie in den Strategietester ein.
Grüße. Können Sie mir sagen, was das Problem ist und wie ich es lösen kann?
Ich habe einige Kerzenhalter in der Geschichte zum Testen geändert, für die 1., 2., 3. und 6.
Beim Testen wird der zweite verarbeitet, der dritte wird gezeichnet (ohne Verarbeitung) und stoppt mit einem Fehler aufgrund von Stop Out
Guten Tag
Ich habe eine sehr einfache Situation, aber ich habe Schwierigkeiten, sie zu lösen.
Bitte sagen Sie mir, was ich falsch mache:
Problem: Ich kann keinen benutzerdefinierten Indikator(i-DRP...) über iCustom an den Expert Advisor (DR Test) binden
vielen Dank im Voraus