[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 292

 

Hallo.

Bitte helfen Sie mir, herauszufinden, was ich falsch mache.

Bedingt: Ask = 1,3000

PriceAsk = 1,3055 (inkl. bei Step=50 und Srpead=3)

bool BuyOrder=1 ,

if (Ask-PriceAsk+Step-Spread<=0 && BuyOrder==0) warum ist diese Bedingung erfüllt?
 
ed3sss:

Unmittelbar vor der if-Anweisung drucken Sie die Werte aller Variablen in der Bedingung aus

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Es ist wahrscheinlich, dass sich einige Variablenwerte von Ihren Vorstellungen unterscheiden werden.
 
Hallo, in meinem Terminal mt4, wenn ich auf eines der Währungspaare klicken, die direkt unter dem Terminal sind, zum Beispiel (eurusd), um ein Terminal-Fenster mit nur diesem Paar zu öffnenIch muss ein kleines Fenster öffnen und es dann in die obere rechte Ecke erweitern. Das ist noch nie passiert, bitte sagen Sie mir, warum das passiert und wie man es beheben kann?
 
GaryKa:

Unmittelbar vor der if-Anweisung protokollieren Sie die Werte aller Variablen in der Bedingung

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Es ist wahrscheinlich, dass sich einige Variablenwerte von Ihren Vorstellungen unterscheiden werden.

Probieren Sie es aus, danke)
 
zu hoz : Zunächst einmal ein wenig Theorie.


Und nun die Schlussfolgerung

hoz:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Ich möchte verstehen, wie es funktioniert. Deshalb habe ich gefragt.
Derunterstrichene Ausdruck gibt den dezimalen Logarithmus (Logarithmus zur Basis 10) von bd_LOTSTEP zurück, der die Potenz von 10 ist, um bd_LOTSTEP zu erhalten.
 

GaryKa:

Unmittelbar vor der if-Anweisung protokollieren Sie die Werte aller Variablen in der Bedingung

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Sicherlich werden einige der Variablenwerte nicht so sein, wie Sie es sich vorgestellt haben.


ed3sss:


Probieren Sie es aus, danke)

Danke, ich habe einen logischen Fehler im Programm gefunden, jetzt funktioniert alles.
 

Hallo.

Wie kann ich auf dem Chart die Inschrift auf dem aktuellen Instrument Gewinn/Verlust der offenen Aufträge anzeigen.

Es ist schwierig, im Expert Advisor zu überprüfen, ob er Positionen eröffnet hat oder nicht (Terminal an/aus) und das letzte Lotvolumen vor dem Schließen des Terminals zu erfassen.

Ich danke Ihnen.

 
hoz:

Ich bin hier gerade auf eine Funktion gestoßen:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Ich möchte verstehen, wie es funktioniert. Deshalb habe ich gefragt.

Wenn ich falsch liege, entschuldige ich mich. MathLog(x) ist ln(x) (natürlicher Logarithmus). Die Umrechnungsformel lautet log_a(b)=ln(b)/ln(a), in diesem Fall erhalten wir ln(x)/ln(10)=lg(x)(dezimaler Logarithmus). Der ganzzahlige Teil des dezimalen Logarithmus lg(1...9) ist 0, lg(10...99) ist 1, lg(100...999) ist 2, lg(1000...9999) ist 3 usw., d.h. der Logarithmus einer Zahl größer als 1 ist gleich der Anzahl der Ziffern dieser Zahl(vor dem Komma, nicht nach dem Komma zählen) minus 1. Wenn x 0 bis 1 ist, dann ist der ganzzahlige Teil von lg(0,1...0,9) gleich -1, lg(0,01...0,09) gleich -2, lg(0,001...0,009) gleich -3 und so weiter, das heißt, wenn man nicht auf das Minus achtet, ist der dezimale Logarithmus der Zahl von 0 bis 1 gleich der Gesamtzahl der Nullen vor der ersten signifikanten Ziffer. Ich weiß nicht, wie MathCeil funktioniert, aber wenn es den ganzzahligen Teil einer Zahl zurückgibt, sollte diese Funktion die Anzahl der Ziffern in der Zahl vor dem Dezimalpunkt minus eins zurückgeben, wenn die Zahl größer als 1 ist, und die Anzahl der Nullen in der Zahl vor der ersten signifikanten Ziffer, wenn die Zahl 0 bis 1 ist. Das Minimum dieser Funktion liegt im Bereich x gleich 1...9. Bei 10...99 und 0,1...0,9 liefert die Funktion 1, bei 100...999 und 0,01...0,09 liefert sie 2, und so weiter. Die Idee ist...
 

Guten Tag, es gibt einen Fehler im Programm, ich habe mir schon den Kopf zerbrochen, bitte zeigen Sie mit dem Finger darauf, was falsch ist. Ich möchte nur wissen, warum die Bedingung für modifi nicht funktioniert. Auch wenn die Bedingung nicht wahr ist, ist sie dennoch erfüllt, und daher wird bei der Änderung von Fehlern oder 1 oder 130. Ich danke Ihnen allen.

//--------------- ändern Aufträge unter TP-------------------
for (i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
if (Auftragsart() == OP_BUY) {
wenn (OrderTakeProfit() == 0 || OrderTakeProfit() > OprTPB(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPB(TP),0,CLR_NONE);
}
}
wenn ((OrderType() == OP_SELL)) {
if(OrderTakeProfit() == 0 || OrderTakeProfit() < OprTPS(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPS(TP),0,CLR_NONE);
}
}
}
}
zurück(0);
}

double LastOpPrBuy(double va=0)
{
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (va == 0) va = OrderOpenPrice();
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_BUY && OrderOpenPrice()<va) va = OrderOpenPrice()
}
zurück (va);
}
//----------------------------------------------------------------------------------
double LastOpPrSell(double va=0)
{
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (va == 0) va = OrderOpenPrice();
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_SELL && OrderOpenPrice()>va) va = OrderOpenPrice()
}
zurück (va);
}
//----------------------------------------------------------------------------------
double OprTPB(int TP)
{
int j=0;
double TPB=0;
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (Auftragsart() == OP_BUY)
{
TPB+=OrderOpenPrice();
j++;
}
}
wenn (j==0) {
j++;
TPB = Fragen;
}
TPB=(TPB/j)+TP*Punkt;
Rückkehr (TPB);
}
//----------------------------------------------------------------------------------
double OprTPS(int TP)
{
int j=0;
double TPS=0;
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_SELL)
{
TPS+=OrderOpenPrice();
j++;
}
}
wenn (j==0) {
j++;
TPS = Gebot;
}
TPS=(TPS/j)-TP*Punkt;
Rückkehr (TPS);
}
//----------------------------

 
borilunad:
Wir sind alle Neulinge hier! Siehst du nicht, dass wir einfache Dinge nicht wissen! Woher sollen wir das sonst wissen! Zumindest wollen wir das wissen, nicht so wie manche Leute denken, die einfach nur den Code eingeben und sofort das Geld pumpen wollen!


))) Vom Humor eines Händlers:

- Wo kann ich einen profitablen Expert Advisor bekommen?

- Schauen Sie irgendwo oben im Thread nach, dort wurde ein Roboter namens @MOZG@v4.12 gepostet.