Jungs, dies ist eine Frage, für die ich nicht gefunden haben, eine Antwort irgendwo. Welche Funktion in den Indikator zu schreiben, so dass neue Bars nicht öffnen und Ticken in der Null-Bar, bis es funktioniert meine Bedingung, bitte antworten Sie mir privat))
Ich setze Zahlen extern int a =2; extern int b =3; extern int c =4; wie setze ich nun die Zahl abcso, dass sie ihren Wert ändert, wenn ich a, oder b, oder c ändere, um sie mit einem gegebenen d zu vergleichen (z. B. d=344)?
Ich setze Zahlen extern int a =2; extern int b =3; extern int c =4; wie setze ich nun die Zahl abcso, dass sie ihren Wert ändert, wenn ich a, oder b, oder c ändere, um sie mit einem gegebenen d zu vergleichen (z. B. d=344)?
Hallo, 2020.10.03_13:33 GMT+3. Ich habe den Standard Moving Average EA für MetaTrader 4 genommen. Und begann, sie so zu verändern, dass sie rentabel wurde. Beim Versuch, die Abschlussbedingungen mit der OrderProfit()-Funktion im Strategietester zu beschreiben, hat der Expert Advisor den Abschluss von Geschäften unter dieser Bedingung gestoppt. Es geht nicht so weit, dass ein Geschäft geschlossen wird. Ich bezweifle jedoch, dass ich die Abschlussbedingungen richtig geschrieben habe. Andernfalls würde der Expert Advisor die Trades schließen. Ich werde wahrscheinlich versuchen, den Eröffnungspreis des Geschäfts und die letzten Preise aufzuschreiben. Sobald die maximale Differenz zwischen dem Eröffnungskurs und dem letzten Kurs erreicht ist und sich diese Differenz verringert hat, schließen Sie den Handel. Ich hänge die Expert Advisor-Datei an. 13:50 GMT+3.
Николай Никитюк: Hallo, 2020.10.03_13:33 GMT+3. Ich habe den Standard Moving Average EA für MetaTrader 4 genommen. Und begann, sie so zu verändern, dass sie rentabel wurde. Beim Versuch, die Abschlussbedingungen mit der OrderProfit()-Funktion im Strategietester zu beschreiben, hat der Expert Advisor den Abschluss von Geschäften unter dieser Bedingung gestoppt. Es geht nicht so weit, dass ein Geschäft geschlossen wird. Ich bezweifle jedoch, dass ich die Abschlussbedingungen richtig geschrieben habe. Andernfalls würde der Expert Advisor die Trades schließen. Ich werde wahrscheinlich versuchen, den Eröffnungspreis des Geschäfts und die letzten Preise zu schreiben. Sobald die maximale Differenz zwischen dem Eröffnungskurs und dem letzten Kurs erreicht ist und sich diese Differenz verringert hat, schließen Sie den Handel. Ich hänge die Expert Advisor-Datei an. 13:50 GMT+3.
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//--- check order type// if(OrderType()==OP_BUY)
{
/*
if(OrderProfit()>0.0)
{ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
if(OrderProfit()>ProfitMax)
{ProfitMax=OrderProfit(); break;}
if((ProfitMax-DiffProfit)<0.0) break;
if((ProfitMax-DiffProfit)>OrderProfit())
*/if(DiffProfit<OrderProfit()) // Исходя из ваших условий, то вот
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
elsebreak;
break;
}
if(OrderType()==OP_SELL)
{
/*
if(OrderProfit()>0.0)
{ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
if(OrderProfit()>ProfitMax)
{ProfitMax=OrderProfit(); break;}
if((ProfitMax-DiffProfit)<0.0) break;
if((ProfitMax-DiffProfit)>OrderProfit())
*/if(DiffProfit<OrderProfit()) // Исходя из ваших условий, то вот
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
elsebreak;
break;
}
}
//+------------------------------------------------------------------+
Ich habe begonnen, eine Funktion zur Normalisierung der Eingabedaten zu schreiben. Aber ich kann die Originalwerte nicht durch die normalisierten Werte "ersetzen". D.h. ich kann keine Werte in Open timeseries buffer mit neuen Werten aus Temp array aktualisieren. Was ist mein Fehler? Ich habe das Gefühl, dass ich versuche, OOP und Nicht-OOP zu kreuzen)).
Open=new CiOpen();
if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
return;
//---int bars=10;
double Temp[]; //Создаем массив для временного хранения входных данныхArraySetAsSeries(Temp,true); //Устанавливает флаг AS_SERIES
Open.GetData(0,bars,Temp); //Копируем необходимые данные в массив Temp
InputNormalize(Temp,bars); //Нормализуем данные в массиве
//---Как заменить значения в Open значениями из Temp?---
}
//+------------------------------------------------------------------+//| функция нормализации входных данных |//+------------------------------------------------------------------+void InputNormalize(double &buffer[],int bars)
{
double d1=-1;
double d2=1;
double x_min=buffer[ArrayMinimum(buffer,0,bars)];
double x_max=buffer[ArrayMaximum(buffer,0,bars)];
for(int i=0; i<bars; i++)
{
buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
}
return;
}
Ich bin sicher, es geht auch einfacher! In diesem Fall unterrichten Sie mich bitte)
Ich habe begonnen, eine Funktion zur Normalisierung der Eingabedaten zu schreiben. Aber ich kann die Originalwerte nicht durch die normalisierten Werte "ersetzen". D.h. ich kann keine Werte in Open timeseries buffer mit neuen Werten aus Temp array aktualisieren. Was ist mein Fehler? Ich habe das Gefühl, dass ich versuche, OOP und Nicht-OOP zu kreuzen)).
Ich bin sicher, es geht auch einfacher! In diesem Fall unterrichten Sie mich bitte)
Lesen Sie die Sprachdokumentation
Der Wert der vordefinierten Variablen wird vom Client-Terminal gesetzt, bevor ein mql4-Programm zur Ausführung gestartet wird. Vordefinierte Variablen sind konstant und können vom mql4-Programm aus nicht verändert werden.
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
Alexey, danke! Jetzt ist klar, dass das nicht möglich ist.
Es stimmt, ich bin nicht gerade mql4. Ich versuche, Daten über die Klasse CiOpen zu ändern. Ich bin verwirrt durch die Update-Methode, die das Element an einer bestimmten Position des Arrays ändern sollte.
Alexej, danke! Jetzt ist klar, dass das nicht möglich ist.
Es stimmt, ich habe nicht genau mql4. Ich versuche, Daten über die Klasse CiOpen zu ändern. Ich war verwirrt von der Update-Methode, die das Element an einer bestimmten Position des Arrays ändern sollte.
Da die Frage im Bereich mql4 gestellt wurde, habe ich in Bezug auf mql4 geantwortet. Es gibt keine Hinweise auf mql5 in Ihrer Frage. Das Ergebnis ist jedoch das gleiche.
Hallo!
Ich bin in drei Kiefern verwirrt:
Ich setze Zahlen extern int a =2; extern int b =3; extern int c =4; wie setze ich nun die Zahl abcso, dass sie ihren Wert ändert, wenn ich a, oder b, oder c ändere, um sie mit einem gegebenen d zu vergleichen (z. B. d=344)?
Ich danke Ihnen!
Hallo!
Ich bin in drei Kiefern verwirrt:
Ich setze Zahlen extern int a =2; extern int b =3; extern int c =4; wie setze ich nun die Zahl abcso, dass sie ihren Wert ändert, wenn ich a, oder b, oder c ändere, um sie mit einem gegebenen d zu vergleichen (z. B. d=344)?
Ich danke Ihnen!
x = c + b*10 + a*100
x = c + b*10 + a*100
Oh, mein Gott! Ich zerbreche mir den Kopf! Ich danke Ihnen!
Hallo, 2020.10.03_13:33 GMT+3. Ich habe den Standard Moving Average EA für MetaTrader 4 genommen. Und begann, sie so zu verändern, dass sie rentabel wurde. Beim Versuch, die Abschlussbedingungen mit der OrderProfit()-Funktion im Strategietester zu beschreiben, hat der Expert Advisor den Abschluss von Geschäften unter dieser Bedingung gestoppt. Es geht nicht so weit, dass ein Geschäft geschlossen wird. Ich bezweifle jedoch, dass ich die Abschlussbedingungen richtig geschrieben habe. Andernfalls würde der Expert Advisor die Trades schließen. Ich werde wahrscheinlich versuchen, den Eröffnungspreis des Geschäfts und die letzten Preise zu schreiben. Sobald die maximale Differenz zwischen dem Eröffnungskurs und dem letzten Kurs erreicht ist und sich diese Differenz verringert hat, schließen Sie den Handel. Ich hänge die Expert Advisor-Datei an. 13:50 GMT+3.
Hallo!
Ich habe begonnen, eine Funktion zur Normalisierung der Eingabedaten zu schreiben. Aber ich kann die Originalwerte nicht durch die normalisierten Werte "ersetzen". D.h. ich kann keine Werte in Open timeseries buffer mit neuen Werten aus Temp array aktualisieren. Was ist mein Fehler? Ich habe das Gefühl, dass ich versuche, OOP und Nicht-OOP zu kreuzen)).
Ich bin sicher, es geht auch einfacher! In diesem Fall unterrichten Sie mich bitte)
Hallo!
Ich habe begonnen, eine Funktion zur Normalisierung der Eingabedaten zu schreiben. Aber ich kann die Originalwerte nicht durch die normalisierten Werte "ersetzen". D.h. ich kann keine Werte in Open timeseries buffer mit neuen Werten aus Temp array aktualisieren. Was ist mein Fehler? Ich habe das Gefühl, dass ich versuche, OOP und Nicht-OOP zu kreuzen)).
Ich bin sicher, es geht auch einfacher! In diesem Fall unterrichten Sie mich bitte)
Lesen Sie die Sprachdokumentation
Lesen Sie die Sprachdokumentation
Alexey, danke! Jetzt ist klar, dass das nicht möglich ist.
Es stimmt, ich bin nicht gerade mql4. Ich versuche, Daten über die Klasse CiOpen zu ändern. Ich bin verwirrt durch die Update-Methode, die das Element an einer bestimmten Position des Arrays ändern sollte.
Alexej, danke! Jetzt ist klar, dass das nicht möglich ist.
Es stimmt, ich habe nicht genau mql4. Ich versuche, Daten über die Klasse CiOpen zu ändern. Ich war verwirrt von der Update-Methode, die das Element an einer bestimmten Position des Arrays ändern sollte.
Da die Frage im Bereich mql4 gestellt wurde, habe ich in Bezug auf mql4 geantwortet. Es gibt keine Hinweise auf mql5 in Ihrer Frage. Das Ergebnis ist jedoch das gleiche.