[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 283

 
Shniperson:

Hallo! Können Sie mir sagen, wie ich die Prüfung der Aufwärts-/Abwärtsleiste in einer Schleife durchführen kann? Das heißt, wie kann ich diesen Zustand "kürzer" beschreiben?

Close[0]>Open[0]&& Close[1]>Open[1]&& Close[2]>Open[2]&& Close[3]>Open[3]&&& Close[4]>Open[4]&& Close[5]>Open[5]&& Close[6]>Open[6]&& Close[7]>Open[7]

bool Res=true;
for(int i=0;i<8;i++) Res = Res && Close[i]>Open[i];

Vielen Dank im Voraus.


Das könnten Sie tun, aber es wird wahrscheinlich nicht schneller gehen. Die Bedingungen müssen etwas ausgeweitet werden
 

Ich weiß nicht, wie ich das in ein Leben verwandeln kann, ist das möglich?

Meine Strategie ist idealerweise manuell um 8:00 Uhr auf dem Terminal geöffnet, wenn Gewinn, dann bis zum nächsten Tag. Wenn der Gewinn nicht in meine Richtung geht, dann mache ich bei Verlust die Position rückgängig + - egal was, ich eröffne keine weiteren Positionen an diesem Tag und warte bis 8 Uhr morgens. D.h. es sollte maximal zwei Aufträge geben und nicht mehr. Wenn wir den Gewinn nicht erreicht haben, aber der Trawl sich zum Breakeven bewegt hat, rollen wir auch um. Natürlich können wir alles regeln, aber unsere Arbeit erlaubt es uns nicht, Positionen zu überwachen. Es wäre besser, eine Order zu platzieren und den EA der Position folgen zu lassen. Ich habe den RSI angehängt, um ihn mit dem Strategy Tester zu testen.

Das ist alles, was ich brauche.

extern int Hour_To_Open = 08; //час открытия (-1 - не задано), терминальное время
extern int Minute_To_Open = 00; //минута открытия (-1 - не задано), терминальное время
extern double TakeProfit = 50;
extern double StopLoss = 30;
extern double Lot = 0.1;
extern int MagicNumber = 655433;


//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if((Hour()==Hour_To_Open) && (Minute()==Minute_To_Open)) 
{ //если настало время открытия сделок
int total = OrdersTotal();
for (int i = 0; i < total; i++) 
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
return(0);
}
} 
int ticket=1;
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>iRSI(NULL,0,14,PR ICE_CLOSE,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid - StopLoss * Point,Bid + TakeProfit * Point,"My order #",MagicNumber,0,Blue);
if(ticket<0)
{
Sleep(30000);
}
}
else
{
ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask + StopLoss * Point,Ask - TakeProfit * Point,"My order #",MagicNumber,0,Red);
if(ticket<0)
{
Sleep(30000);
}
}
} //end if((Hour()==Hour_To_Open) && (Minute()==Minute_To_Open))
//----
return(0);
}
//+------------------------------------------------------------------+

Ich habe diese Trailing-Stop, ich habe es von einem anderen EA, aber es funktioniert nicht für mich

extern bool UseTrailing = true; //включение/выключение T-SL
extern int TrailingStop = 50; // Фиксированный размер трала
extern int TrailingStep = 1; // Шаг трала

//+-------------------------------------------------------------------------------------------------------------------+
//| трейлинг стоп лосс |
void T_SL() {
int i=0;
for(i=0; i<OrdersTotal(); i++) {
if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if(OrderSymbol() != Symbol()) continue; 

if(OrderType()==OP_BUY) {
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingS top*Point,Digits)) {
if(NormalizeDouble(OrderStopLoss(),Digits)<Normali zeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingS top*Point,Digits))
} //end if(OrderType()==OP_BUY)

if(OrderType()==OP_SELL) {
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Dig its)) {
if(NormalizeDouble(OrderStopLoss(),Digits)>Normali zeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //end if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Dig its))
} //end if(OrderType()==OP_SELL)
} //end for(i=0; i<OrdersTotal(); i++)
} //end void T_SL()
//| трейлинг стоп лосс |
//+-------------------------------------------------------------------------------------------------------------------+

Wie bringe ich sie an? Und die Umkehrung sollte nur einmal nach Eröffnung der Position funktionieren.

 

Reverse muss hier irgendwo in der Nähe suchen, nehme ich an oder nicht?

bool OrderCloseBy(int ticket, int opposite, color Color=CLR_NONE)
Schließen einer offenen Position mit einer anderen Position, die auf demselben Instrument, aber in entgegengesetzter Richtung geöffnet ist. Gibt bei erfolgreichem Abschluss der Funktion TRUE zurück. Gibt FALSE zurück, wenn die Funktion fehlschlägt. Um Informationen über den Fehler zu erhalten, rufen Sie die Funktion GetLastError() auf.
Parameter:
Ticket - Eindeutige Seriennummer des abzuschließenden Auftrags.
gegenüber - Die eindeutige Sequenznummer des entgegengesetzten Auftrags.
Farbe - Farbe des Schlusspfeils im Diagramm. Fehlt der Parameter oder hat er den Wert CLR_NONE, wird der Pfeil nicht im Diagramm angezeigt.
Beispiel:
 if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75) { OrderCloseBy(order_id,opposite_id); return(0); }

 
Mr. Professionals, können Sie mir sagen, ob es möglich ist, ein Skript über die Symbolleiste auszuführen? Im Moment muss das geschriebene Skript entweder über den Navigator oder mit einer voreingestellten Tastenkombination ausgeführt werden (was aus irgendeinem Grund nur ab und zu funktioniert). Frage: Kann ich z. B. dem Symbol im Bereich "Grafische Werkzeuge" eine neue Funktion zuweisen und das Skript über die Symbolleiste ausführen? Vielleicht gibt es andere Möglichkeiten?
 

Guten Tag.

Können Sie mir sagen, wo ich den Originalcode für die Funktion OrderSend() sehen kann ?

Vielen Dank im Voraus.

 
kon12:
Herr Experte, ist es möglich, das Skript über die Symbolleiste auszuführen? Im Moment muss das Skript entweder über den Navigator oder über eine voreingestellte Tastenkombination (die irgendwie nur einmal funktioniert) aufgerufen werden. Frage: Ist es zum Beispiel möglich, dem Symbol auf dem Bedienfeld "Grafische Werkzeuge" eine neue Funktion zuzuweisen und das Skript über die Symbolleiste auszuführen? Gibt es noch andere Möglichkeiten?

Nein, aber Sie können das Ziehen und Ablegen von Etikettenobjekten als Beispiel verwenden...

Herunterladen , in Terminal mit Ersetzung extrahieren, Import von dll in Terminal-Setup zulassen, Expert Advisor an Expertsanhängen , Name des auszuführenden Skripts eingeben, Terminal neu starten oder kompilieren.

Der Expert Advisor implementiert - lädt das Skript auf dem angegebenen Chart nach seinem Namen, wenn das Objekt auf den Chart gezogen wird.

      ServiceLoadScript(WindowHandle(Symbol(), Period()), "ZZ_All_Quotings 4.10425", /*<---- Имя загружаемого скрипта.*/  false);
Dateien:
trade_1.mq4  2 kb
 

Guten Tag!!!

Bitte beraten Sie mich. Ich schreibe einen EA, der auf Kanal-Break arbeitet, indem er zwei anhängige hinter den Kanal setzt. Wenn einer von ihnen auslöst, sollte ein anderer entfernt werden. Wie lässt sich das im Code umsetzen?

 
Parn25:

Guten Tag!!!

Bitte beraten Sie mich. Ich schreibe einen EA, der auf Kanal-Break arbeitet, indem er zwei anhängige hinter den Kanal setzt. Wenn einer von ihnen ausgelöst wird, sollte der andere gelöscht werden. Wie lässt sich das im Code umsetzen?


Vielleicht wäre das eine gute Idee - ich habe das selbst noch nicht gemacht - wenn Ihr EA nur eine Marktorder zulässt (von 2 anhängigen, die zuvor platziert wurden), dann überwachen Sie (verfolgen Sie) die Verfügbarkeit Ihrer (von Magier) Order (Markt) auf dem Markt und löschen Sie die anhängige, sobald sie auftaucht. Das ist alles. Wenn Sie einen schwebenden Auftrag löschen möchten, googeln Sie etwas wie "delete orders site:mql4.com".
 

Hallo!

Ausführen des EA auf dem Testgerät. Der Server ist vierstellig. Wenn Sie einen Kauf- oder Verkaufsauftrag erteilen, steht im Protokoll

2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: open #1 buy 0.10 GBPUSD at 1.5551 sl: 1.4551 tp: 1.5586 ok

Eröffnet aber bei 1,55512 ! Bei den fünf Ziffern. Dann werden die ausstehenden Aufträge mit vier Ziffern platziert und ebenfalls mit vier Ziffern ausgelöst. Aber OP_SELL und OP_BUY öffnen sich nur um fünf Ziffern!

Ich mache NormalizeDouble(Ask,Digits);

Nichts funktioniert! Wie kann ich dieses Problem lösen?

Sie können die letzte Ziffer natürlich auch weglassen. Der Fehler tritt nicht auf, aber um die Reinheit des Experiments zu gewährleisten, muss ich alle meine Geschäfte mit vier Ziffern abschließen.

 
ZZZEROXXX:
Bitte beraten Sie mich, wie ich einen EA, z.B. einen Standard Moving Averages, in ein Skript umwandeln kann, um ihn auf einem Nicht-Standard-Zeitrahmen laufen zu lassen.


UP. Ich würde es zu schätzen wissen, wenn Sie mir sagen könnten, wie man einen EA in ein Skript verwandelt.