Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1139
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Gibt es Roboter für Androiden?
Es gibt kein Autotrading in der mobilen Version von Metatrader und es ist unwahrscheinlich, dass es in absehbarer Zeit erscheinen wird. Wenn Sie den Roboter von Ihrem Telefon aus steuern möchten, benötigen Sie einen VPS, der das Terminal mit dem Roboter hostet, sowie eine Software für den Fernzugriff auf Ihr Telefon.
Ich öffne zehn Wochencharts von Währungspaaren im MT5 und das Terminal lädt 800 Megabyte Tick-Historie. Sie wird ständig geladen, obwohl sich die Karten kaum ändern. Die Frage ist, warum ich eine Tick-Historie benötige, wenn ich nur Wochencharts verwende? Übrigens, auf MT4 öffnen sich Wochencharts sofort und ohne Verzögerung.
dies ist eine Funktion von mt5 - laden Sie alles auf m1 und bauen Sie dann den gewünschten Zeitraum... ....
und somit jedes Mal, für jedes Symbol
Die Idee des EA ist es, zu kaufen oder zu verkaufen, wenn der Preis eine horizontale Ebene oder eine manuell gezogene Trendlinie berührt. Ich habe einen EA aus verschiedenen funktionierenden EAs und Indikatoren erstellt. Aber der EA funktioniert nicht. Oder besser gesagt, er eröffnet nur SELL ohne ein Signal beim ersten Tick. Was ist los?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //Eingangskanal öffnen
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- Konstanten
#define OP_BUY_ 0
#define OP_SELL_ 1
//-------------------------------------------------------------------+
extern double Lots = 0.1;
extern double MaximumRisk = 1;
extern double DecreaseFactor = 0;
bool b_1=true, s_1=true;
//+------------------------------------------------------------------+
Offene Positionen berechnen //|
//+------------------------------------------------------------------+
double MA=iMA(NULL,TF,Per_MA,0,0,0,1);
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY) kauft++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- Rücksendeauftragsvolumen
if(Käufe>0) return(Käufe);
sonst return(-sells);
}
//+------------------------------------------------------------------+
//| Berechnung der optimalen Losgröße |
//+------------------------------------------------------------------+
double LotsOptimized()
{
Doppellose=Lose;
int orders=HistoryTotal(); // Summe der historischen Aufträge
int losses=0; // Anzahl der Verlustaufträge ohne Pause
//---- Losgröße auswählen
//lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,2);
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100/MarketInfo(Symbol(),MODE_TICKVALUE)/StopLoss,2);
//---- berechnet die Anzahl der Verlustaufträge ohne Unterbrechung
if(DecreaseFactor>0)
{
for(int i=Bestellungen-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Fehler in der Historie!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) weiter;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) Verluste++;
}
if(Verluste>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,2);
}
//---- return lot size
if(Los<0,01) Los=0,01;
zurück(lot);
}
//-------------------------------------------------
/* dieser Teil des Indikators
int CheckBreakoutLines(int shift)
{
// Objekte insgesamt
int obj_total = ObjectsTotal();
// Uhrzeit des Taktes
datetime now = Time[shift];
// Iterieren
for(int i = obj_total - 1; i >= 0; i--)
{
// Objektname
string label = ObjectName(i);
// Typen
int OType = ObjectType(label);
bool trendline = false;
bool hline = false;
// Zu bewertender Preis
double cprice = 0;
// Trendlinien
if(OType == OBJ_TREND )
{
bool ray = ObjectGet(label, OBJPROP_RAY);
if(!ray)
{
datetime x1 = ObjectGet(label, OBJPROP_TIME1);
datetime x2 = ObjectGet(label, OBJPROP_TIME2);
if(x1 < jetzt && x2 < jetzt) weiter;
}
cprice = GetCurrentPriceOfLine(label, shift);
Trendlinie = true;
} else if(OType == OBJ_HLINE ) {
cprice = ObjectGet(label, OBJPROP_PRICE1);
hline = true;
} sonst {
weiter;
}
// Ausbrüche und falsche Ausbrüche von Trendlinien und h-Linien
if(MA>cPreis &&Ask<cPreis)
{
if(Trendlinie) { return(OP_BUY_); } else if(hline) { return(OP_BUY_); }
} else if(MA>cprice &&Ask<cprice) {
if(Trendlinie) { return(OP_SELL_); } else if(hline) { return(OP_SELL_); }
}
}
return(EMPTY_VALUE);
}
double GetCurrentPriceOfLine(string label, int shift)
{
double price1 = ObjectGet(label, OBJPROP_PRICE1);
double price2 = ObjectGet(label, OBJPROP_PRICE2);
datetime d1 = ObjectGet(label, OBJPROP_TIME1);
datetime d2 = ObjectGet(label, OBJPROP_TIME2);
int shiftfrom = iBarShift(Symbol(), 0, d1, false);
int shiftto = iBarShift(Symbol(), 0, d2, false);
int lapse = MathAbs(shiftto - shiftfrom);
int distance = MathAbs(shift - shiftfrom);
double pendiente = (price2 - price1) / lapse;
double cpoint = price1 + (distance * pendiente);
zurück(cpoint);
}
//-------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Prüfung auf offene Auftragsbedingungen |
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res;
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
//---- Kaufbedingungen
if(OP_BUY_&&b_1)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-(StopLoss*Point),Ask+TakeProfit*Point," VV",MAGIC,0,Green);
b_1=false; s_1=true;
Rückkehr;
}
//---- Verkaufsbedingungen
if(OP_SELL_&&s_1)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+(StopLoss*Point),Bid-TakeProfit*Point," VV",MAGIC,0,Red);
s_1=false;b_1=true;
Rückkehr;
}
//----
}
//+------------------------------------------------------------------+
//| Startfunktion |
//+------------------------------------------------------------------+
void start()
{
//---- check für Geschichte und Handel
if(Bars<100 || IsTradeAllowed()==false) return;
//---- berechnet offene Aufträge nach aktuellem Symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
Die Idee des EA ist es, zu kaufen oder zu verkaufen, wenn der Preis eine horizontale Ebene oder eine manuell gezogene Trendlinie berührt. Ich habe einen EA aus verschiedenen funktionierenden EAs und Indikatoren erstellt. Aber der EA funktioniert nicht. Oder besser gesagt, er eröffnet nur SELL ohne ein Signal beim ersten Tick. Was ist los?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //Eingangskanal öffnen
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- Konstanten
#define OP_BUY_ 0
#define OP_SELL_ 1
.....................................
.....................................
//---- check für Geschichte und Handel
if(Bars<100 || IsTradeAllowed()==false) return;
//---- berechnet offene Aufträge nach aktuellem Symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
Ich habe das Programm in den Editor geladen und die leeren Zeilen gelöscht. Es wurde möglich, mit einem Blick zu erfassen. Drücken Sie die SRC-Taste und fügen Sie ein. Hier ist das Ergebnis. 1) Warum sollten Sie definieren müssen
wenn wir bereits OP_BUY=0 und OP_SELL=1 haben
2) Die Wurzel des Übels liegt in diesem Fragment. Ein und dieselbe Bedingung (MA>cprice &&Ask<cprice) wird zweimal geprüft, und es werden unterschiedliche Entscheidungen getroffen.
3) Danach führt jeder Zweig Prüfungen durch, aber das Ergebnis ist immer noch dasselbe
Im Allgemeinen kann die obige Zeichenkette wie folgt vereinfacht und geschrieben werden
if(trendline)return OP_BUY; if(hline) return OP_BUY; или еще проще if(trendline or hline) return OP_BUY;
Ich habe das Programm in den Editor geladen und die leeren Zeilen gelöscht. Es wurde möglich, mit einem Blick zu erfassen. Drücken Sie die SRC-Taste und fügen Sie ein. Hier ist das Ergebnis. 1) Warum sollten Sie definieren müssen
wenn wir bereits OP_BUY=0 und OP_SELL=1 haben
2) Die Wurzel allen Übels liegt in diesem Fragment. Ein und dieselbe Bedingung (MA>cprice &&Ask<cprice) wird zweimal geprüft, und es werden unterschiedliche Entscheidungen getroffen.
3) Danach führt jeder Zweig Prüfungen durch, aber das Ergebnis ist immer noch dasselbe
Die obige Zeile kann wie folgt vereinfacht und geschrieben werden
Danke für die Antwort, aber es öffnet sich immer noch nur SELL, wie ich es sehe, da OP_SELL = 1. Diese Bedingung ist immer erfüllt. Ich habe ihn folgendermaßen umgeschrieben
Die Aufträge haben aufgehört sich zu öffnen, meiner Meinung nach funktioniert int CheckBreakoutLines(int shift) nicht.
Liebe Fachleute. Was muss ich vor oder nach der Installation von MT4 tun, damit der Kursverlauf anschließend von jeder beliebigen Festplatte außer der Systemfestplatte geschrieben/gelesen werden kann, oder ist dies NICHT möglich?
MT4 von allen Brokern speichert alles in C:\Users\MAN\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\downloads (für jeden Broker bzw. für jedes seiner Terminals). Zwei MT4 bei zwei Brokern für 3-4 Paare verschlangen 25 GB, d.h. den gesamten freien Speicher. Auch die erforderlichen Anführungszeichen werden in das Prüfprogramm C:\Users\.......\tester\history geladen.
Bitte helfen Sie mit Ratschlägen, die eine Neuinstallation von Windows (ich habe 7) mit Neuzuweisung von Festplattengrößen nicht berücksichtigen. Vielleicht mache ich etwas falsch? Wenn ich es verpasst habe und es schon irgendwo besprochen wurde, bitte ich um einen Link...
Vielen Dank im Voraus.
Liebe Fachleute. Was muss ich vor oder nach der Installation von MT4 tun, damit der Kursverlauf anschließend von jeder beliebigen Festplatte außer der Systemfestplatte geschrieben/gelesen werden kann, oder ist dies NICHT möglich?
MT4 von allen Brokern speichert alles in C:\Users\MAN\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\downloads (für jeden Broker bzw. für jedes seiner Terminals). Zwei MT4 bei zwei Brokern für 3-4 Paare verschlangen 25GB, d.h. den gesamten freien Speicher. Auch die erforderlichen Anführungszeichen werden in das Prüfprogramm C:\Users\.......\tester\history geladen.
Bitte helfen Sie bei der Beratung, ohne Berücksichtigung der Neuinstallation von Windows (ich habe 7) mit Neuzuweisung der Festplattengrößen. Vielleicht mache ich etwas falsch? Wenn ich es verpasst habe und es schon irgendwo besprochen wurde, bitte ich um einen Link...
Vielen Dank im Voraus.
Kopieren Sie einfach den gesamten Terminal-Ordner auf ein systemfremdes Laufwerk, erstellen Sie eine Verknüpfung dazu und schreiben Sie den Schalter /portable