[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 359
Beim Testen des Advisors mit Standardindikatoren, die im MT4-Lieferumfang enthalten sind, auf Währungspaaren - keine Fragen - alles funktioniert gemäß dem Handelsalgorithmus.
Beim Testen von Metallen, wie z.B. Silber und Gold, werden die Orders nicht geöffnet, im Strategy Tester Journal schreiben sie Nullteilung.
Ich habe die gleichen Eingabeparameter, die Historie für diese fünfstellige Brokerfirma (forex4yu) wurde für die getesteten Instrumente hochgeladen.
Was ist der mögliche Grund? Ich möchte meinen EA nicht an einen Telepathen schicken. Ich habe den Expert Advisor persönlich nach der Version des Buches geschrieben.
Beim Testen des Advisors mit Standardindikatoren, die in der MT4-Lieferung für Währungspaare enthalten sind, gab es keine Probleme - alles funktioniert gemäß dem Handelsalgorithmus.
Beim Testen von Metallen, wie z.B. Silber und Gold, werden die Orders nicht geöffnet, im Strategy Tester Journal schreiben sie Nullteilung.
Ich habe die gleichen Eingabeparameter, die Historie für diese fünfstellige Brokerfirma (forex4yu) wurde für die getesteten Instrumente hochgeladen.
Was ist der mögliche Grund? Ich möchte meinen EA nicht an einen Telepathen schicken. Ich habe den Expert Advisor persönlich nach der Version des Buches geschrieben.
Wenn Sie durch eine Variable dividieren, müssen Sie zunächst prüfen, ob sie ungleich Null ist.
Beim Testen des Advisors mit Standardindikatoren, die in der MT4-Lieferung für Währungspaare enthalten sind, gab es keine Probleme - alles funktioniert gemäß dem Handelsalgorithmus.
Beim Testen von Metallen, wie z.B. Silber und Gold, werden die Orders nicht geöffnet, in der Log-Datei des Strategietesters werden sie durch Null geteilt.
Ich habe die gleichen Eingabeparameter, die Historie für diese fünfstellige Brokerfirma (forex4yu) ist für die getesteten Instrumente hochgeladen worden.
Was ist der mögliche Grund? Ich möchte meinen EA nicht an einen Telepathen schicken. Ich habe den Expert Advisor persönlich nach der Version des Buches geschrieben.
Sie sollten den Code sehen. Im Allgemeinen können Sie (in Notepad++) automatisch alle Stellen markieren, an denen ein Divisionszeichen im Code vorkommt, und sehen, ob die Division durch Null in irgendeinem Fall tatsächlich auftritt.
Ich würde den Code gerne sehen. Und im Allgemeinen können Sie (in Notepad++) automatisch alle Stellen markieren, an denen das Divisionszeichen im Code vorkommt, und prüfen, ob in einem bestimmten Fall tatsächlich eine Division durch Null stattfindet.
Ja, ich sehe mir schon die Abdrücke an, wo das Auspacken angekommen ist, da ist alles in Ordnung...
In der Funktion der Volumennormalisierung für Metalle gab es diesen Fehler (Division durch Null), jetzt ist er nicht mehr vorhanden, es gab eine weitere 131 - falsches Volumen, obwohl offensichtlich = 0,01 Lot eingestellt, ich schaue allgemein...
Für Währungen funktioniert diese Funktion zur Normalisierung der Lautstärke korrekt.... Vielleicht gibt es eine Gemeinsamkeit zwischen ihnen (für Metalle und Währungen)?
//--------------------------------------------------------------------// Lot_MM.mqh// //--------------------------------------------------------------- 1 --// Функция вычисления количества лотов.// Глобальные переменные:// double Lots_New - количество лотов для новых ордеров (вычисляется)// double Lots - желаемое количество лотов, заданное пользовател.// double MaksRisk - процент риска// Возвращаемые значения:// true - если средств хватает на минимальный лот// false - если средств не хватает на минимальный лот//--------------------------------------------------------------- 2 --bool Lot_MM() // Позовательская ф-ия
{
int time, ticket; // Наибольшее время открытия и номер ордераdouble orderLots; // Lots double orderProfit; // Profitdouble Price; // Цена открытия рыночного ордераdouble SL; // Значение StopLoss ордераdouble TP; // Значение TakeProfit ордераstring Symb =Symbol(); // Финансовый инструм.double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Размер свободных средств, необходимых для открытия 1 лотаdouble Min_Lot=MarketInfo(Symb,MODE_MINLOT);// Мин. размер. лотовdouble Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symb,MODE_LOTSTEP);//Шаг изменен размераdouble Free =AccountFreeMargin(); // Свободные средстваdouble LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота//--------------------------------------------------------------- 3 --if (Lots>0) // Лоты заданы явно..
{ // ..проверим этоdouble Money=Lots*One_Lot; // Стоимость открываемого ордера if(Money<=AccountFreeMargin()) // Средств хватает..
{
Lots_New=Lots; // ..принимаем заданное// else // Если не хватает..// Lots_New=MathFloor(Free/One_Lot/Step)*Step;// Расчёт лотов Print("Функция Lot_MM: Lots_New = ", Lots_New);
...
...
...
...
// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...
Lots_New = NormalizeLots(Lots_New);
return(true); // Выход из польз. ф-ии
}
//--------------------------------------------------------------- 6 --//+------------------------------------------------------------------+//| Нормализация лота |//+------------------------------------------------------------------+double NormalizeLots(double lot)
{
double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
double lots = NormalizeDouble(lot / lotStep, 0) * lotStep;
lots = MathMax(lots, MarketInfo(Symbol(), MODE_MINLOT));
lots = MathMin(lots, MarketInfo(Symbol(), MODE_MAXLOT));
return (lots);
}
Ich kann es nicht verstehen: die oberste Zeile wird gedruckt, aber die Order öffnet sich nicht mit Fehler 131 - falsches Volumen, ich habe bereits 0,1 und 0,01 eingestellt...
Print ("Функция открытия ордера с рынка - продажа: Teeth = ", NormalizeDouble(Teeth,Digits), " upfractal = ", upfractal," Цена Bid = ", NormalizeDouble(Bid,Digits), " Lots_New = ", NormalizeDouble(Lots_New,2));
Ticket=OrderSend(Symbol(),1,0.01,Bid,50,0,0,"Antiunity-start",Magic,0,Red);
Techno: Wenn Sie durch eine Variable dividieren, müssen Sie zunächst prüfen, ob sie ungleich Null ist.
Danke, das werde ich in Zukunft im Hinterkopf behalten. Nur habe ich dieses Mal eine vorgefertigte Funktion zur Normalisierung der Lautstärke genommen.
Fügen Sie meine Losprüfungsfunktion in Ihre benutzerdefinierten Unterroutinen ein. Und rufen Sie es vor jedem OrderSend() auf. Das Runden erfolgt in meiner DLL nach den Gesetzen der Mathematik: Wenn die gerundete Zahl einen Bruchteil mit einer Zahl >=5 hat, dann wird aufgerundet. Wenn <=4, wird abgerundet. Soweit ich verstanden habe, haben Programmiersprachen aus irgendeinem Grund Probleme damit - ich musste meinen eigenen DLL-Code erstellen. Im Grunde ist der Code sehr einfach, aber ich habe zu meiner Zeit ziemlich viel im Internet gesucht, bevor ich die optimale Lösung gefunden habe. Benötigen Sie den Quellcode der DLL?
// ============ ProverkaLota() =====================================================================// функция принимает нормализует лот ордера//-----------------------------------------------------double ProverkaLota(double LotOrdera,string SMB){
double SMB_MinLot=MarketInfo(SMB,MODE_MINLOT);
double SMB_MaxLot=MarketInfo(SMB,MODE_MAXLOT);
double SMB_LotStep=MarketInfo(SMB,MODE_LOTSTEP);
LotOrdera=OkruglenieDoSotykh(LotOrdera);// округляем до сотыхif(SMB_LotStep==0.1){// округляем до десятых
LotOrdera/=10;
LotOrdera=OkruglenieDoSotykh(LotOrdera);
LotOrdera*=10;// возвращаем дробную часть ордера на место
}
if(LotOrdera<SMB_MinLot){
LotOrdera=SMB_MinLot;
}
if(LotOrdera>SMB_MaxLot){
LotOrdera=SMB_MaxLot;
}
return(LotOrdera);
}
// =================================================================================================
Fügen Sie meine Losprüfungsfunktion in Ihre benutzerdefinierten Unterroutinen ein. Und rufen Sie es vor jedem OrderSend() auf. Das Runden erfolgt in meiner DLL nach den Gesetzen der Mathematik: Wenn die gerundete Zahl in einem Bruchteil mit einer Zahl >=5 endet, dann wird aufgerundet. Wenn <=4, wird abgerundet. Soweit ich verstanden habe, haben Programmiersprachen aus irgendeinem Grund Probleme damit - ich musste meinen eigenen DLL-Code erstellen. Im Grunde ist der Code sehr einfach, aber ich habe zu meiner Zeit ziemlich viel im Internet gesucht, bevor ich die optimale Lösung gefunden habe. Benötigen Sie den Quellcode der DLL?
Nein, das ist zu viel. Was ist mehr volatil von mindestens 20-50 Pips
Leute, könnt ihr mir einen Rat geben:
Beim Testen des Advisors mit Standardindikatoren, die im MT4-Lieferumfang enthalten sind, auf Währungspaaren - keine Fragen - alles funktioniert gemäß dem Handelsalgorithmus.
Beim Testen von Metallen, wie z.B. Silber und Gold, werden die Orders nicht geöffnet, im Strategy Tester Journal schreiben sie Nullteilung.
Ich habe die gleichen Eingabeparameter, die Historie für diese fünfstellige Brokerfirma (forex4yu) wurde für die getesteten Instrumente hochgeladen.
Was ist der mögliche Grund? Ich möchte meinen EA nicht an einen Telepathen schicken. Ich habe den Expert Advisor persönlich nach der Version des Buches geschrieben.
Leute, könnt ihr mir einen Rat geben:
Beim Testen des Advisors mit Standardindikatoren, die in der MT4-Lieferung für Währungspaare enthalten sind, gab es keine Probleme - alles funktioniert gemäß dem Handelsalgorithmus.
Beim Testen von Metallen, wie z.B. Silber und Gold, werden die Orders nicht geöffnet, im Strategy Tester Journal schreiben sie Nullteilung.
Ich habe die gleichen Eingabeparameter, die Historie für diese fünfstellige Brokerfirma (forex4yu) wurde für die getesteten Instrumente hochgeladen.
Was ist der mögliche Grund? Ich möchte meinen EA nicht an einen Telepathen schicken. Ich habe den Expert Advisor persönlich nach der Version des Buches geschrieben.
Leute, könnt ihr mir einen Rat geben:
Beim Testen des Advisors mit Standardindikatoren, die in der MT4-Lieferung für Währungspaare enthalten sind, gab es keine Probleme - alles funktioniert gemäß dem Handelsalgorithmus.
Beim Testen von Metallen, wie z.B. Silber und Gold, werden die Orders nicht geöffnet, in der Log-Datei des Strategietesters werden sie durch Null geteilt.
Ich habe die gleichen Eingabeparameter, die Historie für diese fünfstellige Brokerfirma (forex4yu) ist für die getesteten Instrumente hochgeladen worden.
Was ist der mögliche Grund? Ich möchte meinen EA nicht an einen Telepathen schicken. Ich habe den Expert Advisor persönlich nach der Version des Buches geschrieben.
Sie sollten den Code sehen. Im Allgemeinen können Sie (in Notepad++) automatisch alle Stellen markieren, an denen ein Divisionszeichen im Code vorkommt, und sehen, ob die Division durch Null in irgendeinem Fall tatsächlich auftritt.
Ich würde den Code gerne sehen. Und im Allgemeinen können Sie (in Notepad++) automatisch alle Stellen markieren, an denen das Divisionszeichen im Code vorkommt, und prüfen, ob in einem bestimmten Fall tatsächlich eine Division durch Null stattfindet.
Ja, ich sehe mir schon die Abdrücke an, wo das Auspacken angekommen ist, da ist alles in Ordnung...
In der Funktion der Volumennormalisierung für Metalle gab es diesen Fehler (Division durch Null), jetzt ist er nicht mehr vorhanden, es gab eine weitere 131 - falsches Volumen, obwohl offensichtlich = 0,01 Lot eingestellt, ich schaue allgemein...
Für Währungen funktioniert diese Funktion zur Normalisierung der Lautstärke korrekt.... Vielleicht gibt es eine Gemeinsamkeit zwischen ihnen (für Metalle und Währungen)?
Ich kann es nicht verstehen: die oberste Zeile wird gedruckt, aber die Order öffnet sich nicht mit Fehler 131 - falsches Volumen, ich habe bereits 0,1 und 0,01 eingestellt...
Wenn Sie durch eine Variable dividieren, müssen Sie zunächst prüfen, ob sie ungleich Null ist.
Danke, das werde ich in Zukunft im Hinterkopf behalten. Nur habe ich dieses Mal eine vorgefertigte Funktion zur Normalisierung der Lautstärke genommen.
Bis jetzt ohne Erfolg... Schreibt denselben Fehler...
Ich habe auf meinem Konto im Testprogramm eine Position für Gold mit 10.000 und 0,01 und 0,1 Lots eröffnet - ohne Erfolg.
Vielleicht hatte jemand ein ähnliches Problem? Können Sie mir einen Tipp geben...
Fügen Sie meine Losprüfungsfunktion in Ihre benutzerdefinierten Unterroutinen ein. Und rufen Sie es vor jedem OrderSend() auf. Das Runden erfolgt in meiner DLL nach den Gesetzen der Mathematik: Wenn die gerundete Zahl einen Bruchteil mit einer Zahl >=5 hat, dann wird aufgerundet. Wenn <=4, wird abgerundet. Soweit ich verstanden habe, haben Programmiersprachen aus irgendeinem Grund Probleme damit - ich musste meinen eigenen DLL-Code erstellen. Im Grunde ist der Code sehr einfach, aber ich habe zu meiner Zeit ziemlich viel im Internet gesucht, bevor ich die optimale Lösung gefunden habe. Benötigen Sie den Quellcode der DLL?
Fügen Sie meine Losprüfungsfunktion in Ihre benutzerdefinierten Unterroutinen ein. Und rufen Sie es vor jedem OrderSend() auf. Das Runden erfolgt in meiner DLL nach den Gesetzen der Mathematik: Wenn die gerundete Zahl in einem Bruchteil mit einer Zahl >=5 endet, dann wird aufgerundet. Wenn <=4, wird abgerundet. Soweit ich verstanden habe, haben Programmiersprachen aus irgendeinem Grund Probleme damit - ich musste meinen eigenen DLL-Code erstellen. Im Grunde ist der Code sehr einfach, aber ich habe zu meiner Zeit ziemlich viel im Internet gesucht, bevor ich die optimale Lösung gefunden habe. Benötigen Sie den Quellcode der DLL?
Ja, danke.