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

 
PapaYozh:


Nein, ist es nicht. Es wurde sogar noch schlimmer :)

Verstehen Sie, RefreshRates() aktualisiert die Werte der vordefinierten Ask- und Bid-Variablen, Sie verwenden den einmal in der Price-Variablen gespeicherten Wert.


Verstanden :-) Ich dachte, auf den Preis wird nur zugegriffen, wenn die Ausführung in dieser Funktion OrderSend erreicht

 int OpenPosition(string AdvisorName,int Position,int Magic,double Lots,double StopLoss){ 
 int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); double Price;
 string PeriodString = GetPeriod(Period());
 if(Position == OP_BUY){
 string OrderName = StringConcatenate(AdvisorName," - Покупка по рынку");
 string ErrorName = "Ошибка открытия ордера на покупку";
 string CriticalErrorName = "Невозможно открыть ордер на покупку";
 string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;}
 if(Position == OP_SELL){
 OrderName = StringConcatenate(AdvisorName," - Продажа по рынку"); ErrorName = "Ошибка открытия ордера на продажу";
 CriticalErrorName = "Невозможно открыть ордер на продажу";
 MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;}
 
 while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; 
 Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); 
 Sleep(Interval);} while(N < Сount){
 if(Position == OP_BUY){RefreshRates(); Price = NormalizeDouble(Ask,Digits);}
 if(Position == OP_SELL){RefreshRates(); Price = NormalizeDouble(Bid,Digits);}
 int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,OrderName,Magic,0,Arrow);
 if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; 
 PlaySound("recharge.wav"); break;}}
 else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); 
 ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+
 Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);}
 if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName,
 MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}}
 return(Flag);}
Es scheint gerade jetzt zu sein, nicht wahr?))
 
Dimoncheg:


Verstanden:-) Ich dachte, auf den Preis wird nur zugegriffen, wenn die Ausführung in dieser Funktion OrderSend erreicht

Jetzt scheint es richtig zu sein, oder?))


Ich glaube schon.
 
int BlackOrWhite(int countbar)
{
int result_=0;
 
if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar))
result_=1;
else
result_=-1;
 
if (iOpen(NULL,0,countbar)==iClose(NULL,0,countbar))
result_=0;
 
return(result_);
}

Funktion, ergibt aus irgendeinem Grund nur einen Wert + Compiler schwört :

iClose" - Vergleichsausdruck erwartet

Ich verstehe nicht, was los ist.

if(BlackOrWhite(1)>0)
      {
also verwenden Sie es im Programm.
 
nuan:

Funktion, gibt aus irgendeinem Grund nur einen Wert und der Compiler runzelt die Stirn:

iClose" - Vergleichsausdruck erwartet

Ich verstehe nicht, was los ist.

So verwende ich sie in meiner Anwendung.



if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar)>0)
   result_=1;
else
   result_=-1;

Oder es geht so

if (iClose(NULL,0,countbar)>iOpen(NULL,0,countbar))
   result_=1;
else
   result_=-1;
 
PapaYozh:

Ich glaube schon.

Alles scheint zu funktionieren, vielen Dank.
 
Ich danke Ihnen vielmals.
 

Hallo. Ich brauche etwas Hilfe. Die Frage ist folgende:

Nachdem ein Auftrag ausgelöst wurde, müssen alle anderen Aufträge abgeschlossen werden, egal wie. Und wieder sollten sich durch den Zustand neue eröffnen.

 
sergey_r:

Hallo. Ich brauche etwas Hilfe. Die Frage ist folgende:

Nachdem ein Auftrag ausgelöst wurde, müssen alle anderen Aufträge abgeschlossen werden, egal wie. Und wieder ist die Bedingung, neue zu eröffnen.


Haben Sie das Lehrbuch zu diesem Zeitpunkt gelesen?
 

Bislang habe ich Folgendes verwendet

static bool order_opened = false;

if(order_opened){return(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
Alert (GetLastError()); // Fehlermeldung bei Orderaufgabe
order_opened = true; // wenn die Order funktioniert hat, nicht erneut öffnen

Jetzt müssen wir nur noch einen neuen Auftrag eröffnen, nachdem der Auftrag abgewickelt wurde.


 
sergey_r:

Bislang habe ich Folgendes verwendet

static bool order_opened = false;

if(order_opened){return(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
Alert (GetLastError()); // Fehlermeldung bei Orderaufgabe
order_opened = true; // wenn die Order funktioniert hat, nicht erneut öffnen

Jetzt müssen wir nur noch einen neuen Auftrag eröffnen, nachdem der Auftrag abgewickelt wurde.



Lesen Sie das Tutorial und die Dokumentation, ändern Sie die Logik für das Öffnen und Schließen durch eine Pose-Bedingung, fügen Sie den Code mit STRG+ALT+M ein.
Grund der Beschwerde: