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

 
rigonich:

Ich habe den vorherigen Kommentar beendet, siehe.


Ja, ich verstehe jetzt, warum es einen Vergleich zwischen der Zeit in der Schleife und der Zeit im allgemeinen.... gibt.

Ich verstehe auch die LOGIK - "A" markieren, dann "A" ausschließen, aber erstens habe ich alle Optionen ausprobiert, WO dieses "A" angeheftet werden kann - und trotzdem liefert mir der Berater das letzte Ticket, nicht das vorletzte.

.

Ich habe 2 Schleifen (2 Funktionen) eingegeben - die erste im Original, die zweite mit Ausnahme von "A"... nacheinander ablaufen.

Druckt null....

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

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

{

LastClosetPoz();Sec_LastClosetPoz();

Drucken ( ticket2,ticket);

}

zurück(0);

}

//--------------------------------------------+

int LastClosetPoz()

{

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(); A=Ticket;

}

}

}

sonst weiter;

}

}

zurück(Ticket);

}


//--------------------------------------------

int Sec_LastClosetPoz()

{

int Tott=OrdersHistoryTotal(),Ticket2=-1; datetime time2=0;

if(Tott>0)

{

for(int i=0;i<OrdersHistoryTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

{

if(OrderSymbol()==Symbol()&&OrderTicket()!=A)

{

if(AuftragSchlussZeit()>Zeit2)

{

time2=OrderCloseTime();Ticket2=OrderTicket();

}

}

}

sonst weiter;

}

}

zurück(Ticket2);

}

 
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?

DLL - siehe Beispiele. Ist es möglich, dass ein Programmierer, der weiß, wie man in C/C++ schreibt, nicht in der Lage ist, mit den Standardbeispielen aus der МТ-Lieferung umzugehen, und dies trotz des Vorhandenseins einer Menge von Materialien im Forum?
 
VladislavVG:

DLL - siehe Beispiele. Ist es möglich, dass ein Programmierer, der weiß, wie man in C/C++ schreibt, nicht in der Lage ist, die Standardbeispiele aus der МТ-Lieferung zu verstehen, und dies trotz der Tatsache, dass es eine Menge Material im Forum gibt?

Ich bin kein Programmierer, schreibe aber manchmal die einfachsten Dinge selbst. Ich muss keinen komplexen Roboter in irgendeiner Sprache schreiben, und das ist überhaupt kein Problem. Ich möchte einen Roboter mit einer eigenen Schnittstelle schreiben und nicht einen Teil der Funktionen als DLL ausführen und sie von μl aus aufrufen. Gott sei Dank gibt es viele verschiedene visuelle Sprachen, in denen dies ohne großen Stress möglich ist.
 
lottamer:


Ja, ich verstehe jetzt, warum es einen Vergleich für die Zeit in der Schleife und die Zeit im allgemeinen.... gibt.

Ich verstehe auch die LOGIK - "A" markieren, dann "A" ausschließen, aber erstens habe ich alle Optionen ausprobiert, WO dieses "A" angeheftet werden kann - und trotzdem liefert mir der Berater das letzte Ticket, nicht das vorletzte.

.

Ich habe 2 Schleifen (2 Funktionen) eingegeben - die erste im Original, die zweite mit Ausnahme von "A"... eine nach der anderen ablaufen.

Druckt null....


Diese Funktion verwendet lokale Variablen, daher sollte sie nicht ja mal als separate Funktion ausgeführt werden, zwei Schleifen nacheinander in einer Funktion bilden oder A als globale Variable deklarieren. Ich gehe Zigaretten holen, du versuchst es, und wenn es nicht klappt, klopfst du mir, wenn ich zurückkomme, und wir finden eine Lösung.
 
Desead:

Ich bin kein Programmierer, aber manchmal schreibe ich die einfachsten Dinge selbst. Ich möchte einen einfachen Roboter in einer beliebigen Sprache schreiben, und das ist überhaupt kein Problem. Ich wollte einen ganzen Roboter mit einer eigenen Schnittstelle schreiben, ohne Metatrader aufzurufen, nicht einen Teil seiner Funktionen in einer DLL und rufen Sie sie von μl. Ich habe eine Menge verschiedener visueller Sprachen erfunden, in denen dies ohne großen Aufwand möglich ist.

Wenn Sie die Funktionen des Terminals überhaupt nutzen wollen (mehr als hundert verschiedene eingebaute Funktionen, eingebaute Indikatoren, die Programmoberfläche selbst), dann handelt es sich nicht um einen einfachen Expert Advisor, sondern um ein von Ihnen selbst gestaltetes Terminal.
 
rigonich:

Diese Funktion verwendet lokale Variablen, also führen Sie sie nicht ja mal als separate Funktion aus, machen Sie nicht zwei Schleifen nacheinander in einer Funktion, oder deklarieren Sie A als globale Variable. Ich gehe Zigaretten holen, und du versuchst es, und wenn du es nicht schaffst, klopfst du an, wenn ich zurückkomme, und wir finden eine Lösung.


IS!!!! gab es einen kleinen Fehler...es war nicht Ticket, sondern LastClosetPoz() und Sec_LastClosetPoz(), die hätten gedruckt werden müssen.

Ich bin sicher, dass meine Version nicht die eleganteste ist... aber es funktioniert... Wie packt man zwei Schleifen in eine Funktion... Ich weiß nicht... ich habe es versucht... ich bekam Fehler... zum Teufel damit! (wenn es nicht zu viel Mühe macht - zeigen Sie es mir - es wird mir nützlich sein, wenn nicht - nun, egal...) Trotzdem danke.

Allerdings habe ich das Gefühl, wenn ich das Ticket für die 35. abgeschlossene Transaktion herausfinden muss, bekomme ich Probleme mit meinem Ansatz :)))) hahahah

Meine Güte, das ist ja noch gar nicht absehbar... höchstens 3...

 
rigonich:

Diese Funktion verwendet lokale Variablen, also führen Sie sie nicht ja mal als separate Funktion aus, machen Sie nicht zwei Schleifen nacheinander in einer Funktion, oder deklarieren Sie A als globale Variable. Ich gehe Zigaretten holen, dann kannst du es versuchen, und wenn es nicht klappt, klopfst du mir, wenn ich zurückkomme, und wir finden eine Lösung.


funktionierte, bis ich folgendes einfügte

if (OrderSelect( (LastClosetPoz (),SELECT_BY_TICKET)==true)) Print("Stop-Loss", OrderStopLoss();

es schwört

')' - falsche Parameteranzahl G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

Ich verstehe nicht, was es will?

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

AUSGEFUNDEN

==true....

was seltsam ist, weil die Beispiele im Tutorial das immer sagen...

und es hat auch den Stoppwert aufgerundet...auf die 4. Stelle...

 
lottamer:


IS!!!! gab es einen kleinen Fehler... der Druck hätte LastClosetPoz() und Sec_LastClosetPoz() anstatt Ticket heißen müssen.

Ich bin sicher, dass meine Version nicht die eleganteste ist... Aber es funktioniert... Wie man zwei Schleifen in eine Funktion einfügt... Ich weiß nicht... ich habe es versucht... ich habe Fehler bekommen... zum Teufel damit! (wenn es nicht zu viel Mühe macht - zeigen Sie es mir - es wird mir nützlich sein, wenn nicht - nun, egal...) Trotzdem danke.

Ich habe jedoch das Gefühl, dass ich mit meinem Ansatz in Schwierigkeiten gerate, wenn ich das Ticket für die 35. abgeschlossene Transaktion herausfinden muss :)))) hahahah

meine Güte, das ist ja noch nicht mal in Sicht... höchstens 3...



int Ticket1,Ticket2;
//+------------------------------------------------------------------+
int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0;
if(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(AuftragSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket1=OrderTicket();
}
}
}
sonst weiter;
}
}
Tot=OrdersHistoryTotal();A=Ticket1;time=0;
if(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
if(OrderTicket()==A)weiter;
if(AuftragSymbol()==Symbol())
{
if(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket2=OrderTicket();
}
}
}
sonst weiter;
}
}
zurück(0);
}
//+------------------------------------------------------------------+
P.S. UndSie müssen eine verschachtelte Schleife (d.h. Schleife in Schleife) verwenden, umden 35. abgeschlossenen Handel zu ermitteln.
 
rigonich:


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


druckt Nullen...funktioniert nicht...Ich werde nicht weiter suchen, denn es ist offensichtlich, dass die Schleifen einfach durch andere ersetzt werden - das Volumen ist eindeutig nicht reduziert..... und wir haben bereits eine funktionierende Version. Ich kann Aufträge in der ersten Variante vergleichen... und hier kann ich nicht einmal sehen, wo die zweite ist... und die erste ist Null...

Nach einigen kleinen Basteleien... die eindeutig das Gehirn entwickeln, funktionierte auch dieser Code! :))) danke

 
lottamer:


funktionierte, bis ich folgendes einfügte

if ( Print("StopLoss", OrderStopLoss());) Print("Stop-Loss", OrderStopLoss();

es schwört

')' - falsche Parameteranzahl G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

Ich verstehe nicht, was es will?


Nochmals 45, in dieser Form wähltOrderSelect(LastClosetPoz (),SELECT_BY_TICKET) standardmäßig zwischen schwebenden und offenen Aufträgen aus und dieser Auftrag ist nicht dabei. Setzen SieOrderSelect(LastClosetPoz (),SELECT_BY_TICKET, MODE_HISTORY).