[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 620

 
und bei der Wiedereröffnung des Handels - wiederholt sich das Ergebnis mit einer konstanten Differenz von 1pp. !!!! d.h. unabhängig vom Gewinn der letzten Transaktion - die erste Option wird um 1 mehr gedruckt als die zweite!
 
lottamer:


ja, so ist mir dieser Punkt wohlbekannt...

Bitte schreiben Sie einen Artikel, in dem Sie das Ticket der letzten Woche aus der Geschichte anfordern... und ich werde die Logik daraus übernehmen...



int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),Ticket=-1; datetime time=0;
if(Tot>0)
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(AuftragSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket=OrderTicket();
}
}
}
sonst weiter;
}
}
zurück(Ticket);
}

 
lottamer:

MISTIC!!!

diese

-----------------------------------------------------------------------------


pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // für Währungen mit EUR-Dimension


Drucken (pp_sell);

------------------------------------------------------------------------------------

Druckt -10, wie es sein sollte, da der letzte SELL-Handel einen Gewinn von 10 hat

aber wenn Sie mehrere DIFFICULT TIMES zwischen PRINT und VARIABLE einfügen, z. B.

----------------------------------------------------------------------------


pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // für Währungen mit EUR-Dimension


if ( Stunde()>=10 && Stunde()<20)

{

if ( Stoch_1>Stoch_2) return(0);

sonst {

if (AufträgeSumme()==0)

{ PlaySound("ok.wav");

if ( GetTypeLastClosePos()==1) Print (pp_sell);

}

Print("___");

}

}

zurück(0);

}

------------------------------------------------------------------------------------

Es funktioniert, aber es wird -9 !!!! gedruckt.

Was ist das Geheimnis?


In solchen Fällen häufen sich die Berechnungsungenauigkeiten und können schließlich beträchtlich werden. Sie denken, Sie gebenNICHTS VERÄNDERNDE BEDINGUNGEN ein, in Wirklichkeit zwingen Sie den Computer, unnötige Berechnungen durchzuführen, und Ihre Bedingungenändern sich NICHTS.

Und sind Sie sicher, dassPriceOpenLastClosePos() und PriceCloseLastPos() Werte für dieselbe Position setzen?

 
rigonich:


int fLastClosetPoz()

{
int Tot=OrdersHistoryTotal(),Ticket=-1; datetime time=0;
if(Tot>0)
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(AuftragsSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket=OrderTicket();
}
}
}
sonst weiter;
}
}
zurück(Ticket);
}


beginnend mit if(OrderCloseTime()>time)... dann ist es nicht klar, woher es kommt... nun, egal...

Es wird ein Ticket gedruckt, aber nur das letzte. Und was ist mit dem vorletzten Ticket zu tun? Ich weiß nicht, wie das zweite Ticket gedruckt werden kann?

Zuerst schreibe ich einfach Print LastClosetPoz()

die 2. (i) nehmen? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY)....?

Print LastClosetPoz(2) ?? offensichtlicher Fehler, wäre aber logisch :)))

Ich versuche, andere Parameter einer geschlossenen Position(Schlusskurse einer Stop-Position) anstelle von OrderTicket in die Zeile Ticket=OrderTicket(); zu setzen - es funktioniert nicht.

 
rigonich:

Sie arbeiten mitnicht normalisierten Werten wie Double. In solchen Fällen häufen sich die Berechnungsungenauigkeiten und können schließlich erheblich werden.


Ist es nicht fett, dass ein Computer in 4 Zeilen bis zu 10% Fehler ansammelt? :))))))))))) (in großen Zahlen weniger als 10%)

1) Was gibt es zu retten, wenn der geschlossene Auftrag fixiert ist und alle seine Parameter "nicht fließend" sind?

2) Die Bedingungen standen in keinem Zusammenhang mit der Berechnung des Ausgangsparameters. Sie waren nur eine Barriere - loslassen - nicht loslassen...

3) Und warum fließt das Ergebnis dann nicht innerhalb der Arbeit eines EA, sondern von einem zum anderen?

 
lottamer:


beginnend mit if(OrderCloseTime()>time)... dann ist es nicht klar, woher es kommt... aber okay...

Es wird ein Ticket gedruckt, aber nur das letzte. Und was soll man mit dem vorletzten Ticket machen? Ich weiß einfach nicht, wie man das mit dem zweiten Ticket macht.

2. nehmen (i) ? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY)....?

1. Bitte schreiben Sie ein Stück mit Ticketanfrage aus der Geschichte.-Ihre Frage.

Um den vorletzten zu finden, müssen wir uns das Ticket des letzten merken (z.B. in der Variablen A), dann muss die Schleife noch einmal durchlaufen und diese Reihenfolge "überspringen", d.h. z.B. die Zeile

if(OrderSymbol()==Symbol()) zuif(OrderSymbol()==Symbol()&& OrderTicket()!=A), oder fügen Sie eine Zeileif(Ticket()!=A)continue;

Und ich habe bereits erklärt, dass der Auftragsindex nicht immer mit demjenigen übereinstimmt, der im Konto geschlossen wurde, da Markt- und schwebende Aufträge zusammen berücksichtigt werden und letztere keinen Schlusskurs haben, weshalb alle Aufträge in einer Schleife durchlaufen werden, um den letzten geschlossenen Auftrag zu finden, und der Auftrag mit der längsten Schlusszeit durchgesehen wird. Das heißt, der letzte geschlossene Auftrag könnte den Index 3 haben und der vorletzte - 7.

 
rigonich:

1. Bitte schreiben Sie einen Beitrag, in dem Sie ein Ticket für die letzte Woche der Geschichte beantragen...-Ihre Frage.

Um den vorletzten zu finden, sollten wir uns das Ticket des letzten merken (z.B. in der Variablen A), dann die Schleife noch einmal laufen lassen und diese Reihenfolge "überspringen", d.h. die Zeile

if(OrderSymbol()==Symbol()) zuif(OrderSymbol()==Symbol()&& OrderTicket()!=A), oder fügen Sie eine Zeileif(Ticket()!=A)continue;


Leitfrage:

what for(int i=0;i<OrdersHistoryTotal();i++) brauchen wir genau OrdersHistoryTotal(), wenn ich z.B. nur 2 Abschlüsse benötige?

Wie wäre es damit

or(int i=0;i<2;i++) ? (geprüft - Ticket =-1....) nda.....tuman...:)))

 
lottamer:


Leitfrage:

aber warum brauchen wir die Zeile for(int i=0;i<OrdersHistoryTotal();i++) brauchen wir genau OrdersHistoryTotal(), wenn ich z.B. nur 2 Abschlüsse benötige?

Wie wäre es damit

or(int i=0;i<2;i++) ? (geprüft - Ticket =-1....) nda.....tuman...:)))


Ich habe den vorherigen Kommentar beendet. Außerdem habe ich Ihnen einen Code geschrieben, der nach dem letzten abgeschlossenen Handel für das aktuelle Instrument sucht.
 
Helfen Sie mir, wenn ich zum Beispiel einen Roboter in C/C++ schreiben möchte. Es ist kein Problem, ein solches Programm zu schreiben, aber wie verbinde ich es mit Metatrader? Wie erhält man Kurse und wie sendet man ein Kauf-/Verkaufssignal zurück?
 
Desead:
Helfen Sie mir, wenn ich zum Beispiel einen Roboter in C/C++ schreiben möchte. Es ist kein Problem, ein solches Programm zu schreiben, aber wie verbinde ich es mit Metatrader? Wie erhält man Kurse und wie sendet man ein Kauf-/Verkaufssignal zurück?

Ich kenne keine anderen Sprachen, aber es kann möglich sein, Ihren Code als DLL zu schreiben und dann kann es möglich sein, von MQL-Programmen aufzurufen.
Grund der Beschwerde: