[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 922

 
_SS_:
Wie kann ich die offene Auftragsart bestimmen?

OrderType()

Eigentlich sollten Sie mit einem Lehrbuch beginnen... :) Oder verwenden Sie zumindest F1 im MetaEditor

int OrderType( )
Gibt den Auftragstyp des aktuell ausgewählten Auftrags zurück. Es kann einer der folgenden Werte sein:
OP_BUY - Kaufposition,
OP_SELL - Position verkaufen,
OP_BUYLIMIT - ausstehender Kaufauftrag bei Erreichen eines bestimmten Niveaus, wenn der aktuelle Preis höher als das Niveau ist,
OP_BUYSTOP - ausstehender Kaufauftrag, wenn das angegebene Niveau erreicht wird und der aktuelle Kurs unter dem Niveau liegt,
OP_SELLLIMIT - ausstehender Verkaufsauftrag, wenn das angegebene Niveau erreicht wird und der aktuelle Preis unter dem Niveau liegt,
OP_SELLSTOP - schwebende Verkaufsorder, wenn das angegebene Niveau erreicht wird und der aktuelle Preis über dem Niveau liegt.
Die Bestellung muss mit der Funktion OrderSelect() vorausgewählt werden.
Beispiel:
 int order_type; if(OrderSelect(12, SELECT_BY_POS)==true) { order_type=OrderType(); // ... } else Print("OrderSelect() hat einen Fehler geliefert - ",GetLastError());
 
gheka:

double NormalizeDouble( double value, int digits)

Wert - Fließkommawert. --- was ist das?
Ziffern - Präzisionsformat, die Anzahl der Nachkommastellen (0-8). --- wie 1,29800 ist 5 Ziffern, richtig?

Eine Gleitkommazahl ist eine reelle Zahl wie double

Und anstelle von Ziffern eine Variable vom Typ int verwenden

Zum Beispiel int dg=MarketInfo ( Symbol(), MODE_DIGITS);

 
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;


bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell

//--------------------------------------------------------------- 3 --
// Учёт ордеров


for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;

if(Total!=0 || time==Time[1])return;

static int KolBars;



if (Close[0]-Open[0] > Point && Close[1]-Open[1] > Point && Bars == KolBars)


{

KolBars=Bars ; // запоминаем кол-во бар при которых совершались действия

}




// Торговые критерии

// Критерий откр. Buy


Opn_B=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0);time=Time[1];}

}




Bitte helfen Sie, ich frage zum 3. Mal. Ein elementarer EA eröffnet eine Kaufposition beim Erscheinen einer neuen Kerze (vorausgesetzt, die vorangegangenen 2 Kerzen sind grün) und schließt die Position beim Schließen der Kerze, bei der die Position eröffnet wurde, oder beim Schließen der nächsten Kerze.

Der, den Sie oben sehen, öffnet eine Position jedes Mal, wenn eine neue Kerze erscheint, ohne auf die Eröffnungskriterien zu reagieren, aber ich verstehe nicht, wie man die Position schließt, ich konnte es nicht im Tutorial oder in den Foren finden.

 
artmedia70:

Fließkommawert ist eine reelle Zahl vom Typ Double

Und anstelle von Ziffern eine Variable vom Typ int verwenden

Zum Beispiel int dg=MarketInfo ( Symbol(), MODE_DIGITS);


Sie schrieben mir: "NormalizeDouble(), überprüfe das maximale/minimale Lot-Limit, wenn es fünfstellig ist - erhöhe Stop und Profit um das 10-fache".


In der Dokumentation heißt es: "Rundung einer Fließkommazahl auf die angegebene Genauigkeit. Die berechneten StopLoss- und TakeProfit-Werte sowie die Eröffnungskurse der Pending Orders müssen auf die Genauigkeit normalisiert werden, deren Wert in der vordefinierten Variable Digits" gespeichert wird.

Ich habe es nicht im Lehrbuch gefunden. Ich habe verstanden, dass ich den aktuellen Preis, StopLoss und TakeProfit mit NormalizeDouble normalisieren muss --- wie sollte ich es normalisieren?

double NormalizeDouble( double value, int digits)

double value -- statt double value kann ich z.B. Prise verwenden

int digits -- und diese Variable dg ist gleich MarketInfo( Symbol(), MODE_DIGITS); ???

 
gheka:


Ich habe geschrieben: "NormalizeDouble(), prüfe auf maximales/minimales Lot-Limit, wenn fünf Ziffern - erhöhe Stop und Profit um das 10-fache".


In der Dokumentation heißt es: "Rundung einer Fließkommazahl auf die angegebene Genauigkeit. Die berechneten StopLoss- und TakeProfit-Werte sowie die Eröffnungskurse von Pending Orders müssen auf die Genauigkeit normalisiert werden, deren Wert in der vordefinierten Variable Digits" gespeichert wird.

Ich habe nicht gefunden, es in der Anleitung, ich verstehe, ich brauche, um NormalizeDouble verwenden ---, um den aktuellen Preis, StopLoss und TakeProfit normalisieren? Wenn ja, wie genau?

double NormalizeDouble( double value, int digits)

doppelter Wert -- stattdessen kann ich z.B. Prise setzen

int digits -- und diese Variable dg ist gleich MarketInfo( Symbol(), MODE_DIGITS); ???

int StopLoss=50; // StopLoss in Pips

int TakeProfit=150; // TakeProfit in Pips

intOrderDistance=50; // Ausstehender Auftragsabstand in Punkten

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

int pt=MarketInfo(Symbol(), MODE_POINT); // Punktgröße in der Kurswährung

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Anzahl der Nachkommastellen im Symbolpreis

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Minimal zulässiges Stop-Loss/Stake-Profit-Niveau in Punkten

double pa=MarketInfo(Symbol(), MODE_ASK); // Briefkurs

double pb=MarketInfo(Symbol(), MODE_BID); // Geldkurs

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

double slB=NormalizeDouble(pa-StopLoss*pt, dg); // Normalisierung des StopLoss-Kursniveaus für die Kaufposition

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // Normalisierung des TakeProfit-Preisniveaus für die Bid-Position

double slS=NormalizeDouble(pb+StopLoss*pt, dg); // normalizeStopLoss Kursniveau für Verkaufsposition

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // Normalisierung des TakeProfit-Preisniveaus für die Verkaufsposition

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // Normalisierung des Preisniveaus für die Platzierung einer schwebenden Kauforder

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // Normalisierung des Preises für die Platzierung einer schwebenden Verkaufsorder

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // Normalisierung des Preisniveaus des StopLoss für eine schwebende Kauforder

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // Normalisierung des Preisniveaus von TakeProfit der schwebenden Kauforder

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // Normalisierung des Preisniveaus von StopLoss für die anstehende Verkaufsorder

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalisierung des Preisniveaus von TakeProfit der anstehenden Verkaufsorder

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

Finde es heraus... :)

Und vergessen Sie nicht den StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Überprüfen Sie den Mindestabstand zwischen Anhalten und Abheben, um sicherzustellen, dass er nicht kleiner als dieser Wert ist.

 
artmedia70:

int StopLoss=50; // StopLoss in Punkten

int TakeProfit=150; // TakeProfit in Punkten

intOrderDistance=50; // Abstand der ausstehenden Aufträge in Punkten

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

int pt=MarketInfo(Symbol(), MODE_POINT); // Punktgröße in der Kurswährung

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Anzahl der Nachkommastellen im Symbolpreis

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Minimal zulässiges Stop-Loss/Stake-Profit-Niveau in Punkten

double pa=MarketInfo(Symbol(), MODE_ASK); // Briefkurs

double pb=MarketInfo(Symbol(), MODE_BID); // Geldkurs

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

double slB=NormalizeDouble(pa-StopLoss*pt, dg); // Normalisierung des StopLoss-Kursniveaus für die Kaufposition

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // Normalisierung des TakeProfit-Preisniveaus für die Bid-Position

double slS=NormalizeDouble(pb+StopLoss*pt, dg); // Normalisierung des StopLoss-Kursniveaus für die Verkaufsposition

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // Normalisierung des TakeProfit-Preisniveaus für die Verkaufsposition

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // Normalisierung des Preisniveaus für die Platzierung einer schwebenden Kauforder

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // Normalisierung des Preises für die Platzierung einer schwebenden Verkaufsorder

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // Normalisierung des Preisniveaus des StopLoss für eine schwebende Kauforder

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // Normalisierung des Preisniveaus des TakeProfits der schwebenden Kauforder

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // Normalisierung des Preisniveaus von StopLoss für die anstehende Verkaufsorder

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalisierung des Preisniveaus von TakeProfit der anstehenden Verkaufsorder

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

Finde es heraus... :)

Und vergessen Sie nicht den StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Überprüfen Sie den Mindestabstand für die Einstellung von Haltestellen und Abfahrten, damit dieser Wert nicht unterschritten wird


Vielen Dank!!! Ich werde es mir ansehen! )
 
Wie erstelle ich eine Funktion und rufe sie auf?
 

Windows neu installiert. Das Warnfenster erscheint nicht mehr. Es gibt eine akustische Benachrichtigung, es gibt einen Protokolleintrag, aber das schwebende Fenster erscheint nicht mehr.

Ich habe das Terminal gesäubert und alles neu kompiliert. Was könnte der Grund sein?

 
_SS_:
Wie erstelle ich eine Funktion und rufe sie auf?
Zum x-ten Mal: Lesen Sie ein Lehrbuch und lernen Sie die Grundlagen... :)
 
artmedia70:
Zum x-ten Mal, lesen Sie ein Lehrbuch, studieren Sie den Stoff... :)
Ich habe es versucht, es funktioniert nicht!