Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1067

 

Hilfe, bitte! Es gibt 2 Dateien: einen Indikator und einen Expert Advisor. Wie verweist man korrekt auf die Funktion im Indikator über #include? iCustom ist aus verschiedenen Gründen nicht geeignet. Das habe ich in den Indikator geschrieben:

bool BuyTrue(double& переменная, int переменная) export
{
   //тело функции

   return(true);
}   

Und das ist, was ich in den Expert Advisor geschrieben habe:

#import "НазваниеИндикатора.ex4"
   bool BuyTrue(double& переменная, int переменная);
if (BuyTrue(переменная, переменная))
Opn_B = true;

Aber aus irgendeinem Grund funktioniert der Expert Advisor nicht, der Indikator erscheint beim Testen nicht im Preisdiagramm. Habe ich es richtig geschrieben, und wenn es einen Fehler gibt, wo liegt er?

 
AlexeyVik:

Tuta.


Ich habe keins. Aber es gibt definitiv irgendwo eine Datei, aus der ich die Informationen entnehme.


 

Bitte helfen Sie mir bei der Kompilierung in mt4

FileClose' - Ausdruck vom Typ 'void' ist illegal TickToCVS~.mq4 84 12

Dateien:
 
abeiks:

Ich habe keins. Aber es gibt auf jeden Fall irgendwo eine Datei, aus der ich die Informationen entnehme.


Mein Screenshot zeigt, dass das Menü von MetaEditor stammt und Ihr Screenshot ist von MT.
 
AlexeyVik:

Dies ist der Wert EMPTY_VALUE

Achten Sie darauf, wo er auftaucht.

Ich danke Ihnen. Sie haben mir geholfen, das Problem zu lösen. Wenn mein Indikator geladen wird, berechnet er die Balken ab dem ersten Balken, nicht ab Null (das war Absicht), bei Null berechnet er die Tick-Historie, nicht die historischen Daten. Wenn ich jetzt den Zeitrahmen ändere, ihn mit dem Chart verbinde und das Terminal neu starte, setze ich die Pufferwerte bei Takt 0 auf Null zurück, Problem gelöst.
 
AlexeyVik:
Mein Screenshot zeigt, dass das Menü von MetaEditor stammt und Ihr Screenshot ist von MT.
Genau! Ich danke Ihnen!
 
Wie kann ich den Eröffnungskurs eines Auftrags in der Historie erhalten und nicht den Preis einer offenen Position, wenn dieser Auftrag ausgelöst wurde? In der angehängten Funktion, wenn ein Auftrag ausgelöst hat, kann dieser Auftrag nur in Positionen gefunden werden, so dass es nicht funktioniert. Und bei den Positionen haben wir nur den Preis der offenen Position, aber nicht den Auftragspreis.
double GetPriceLastCloseOrder(string sy="", int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal(); 
  double r=0;

  if (sy==NULL) sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()>1 && OrderType()<6) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderOpenPrice();
          }
        }
      }
    }
  }
  return(r);
}  
 

Hallo Leute, meine Frage ist, dass ich eine Bestellung nicht ändern kann. Es gibt zwei Aspekte, ich verstehe die Mathematik der Änderung nicht, also erklären Sie es mir bitte.

So wie ich es sehe, ist SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS

der zweite Aspekt. gelernt aus dem XBMS-Video

wie ich habe nicht versucht, die Werte der Variablen in der Tester eror 130 nicht die richtige Stop-Loss und Scheiße wie diese zu ändern

2016.06.28 21:42:23.402 2016.06.23 00:00 trade RSI inputs: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087;

obwohl es eine Multiplikation aus Ziffern und Funktion auf den Fall des falschen SL gibt


extern double Lots = 0.1;

extern int Schlupf = 10;

extern int StopLoss = 10;

extern int TakeProfit =30;

extern int RSIPeriod = 7;

extern int Magic =1087;

doppelter MaRSI;


int TP,SL;

bool tfu;


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

Experteninitialisierungsfunktion //|

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

int OnInit()

{

if(Ziffern == 3||Ziffern == 5)

{

Schlupf *= 10;

TakeProfit *= 10;

StopLoss *= 10;

}

return(INIT_SUCCEEDED);

}

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

//| Experten-Deinitialisierungsfunktion |

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

void OnDeinit(const int reason)

{


}

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

//| Experten-Tick-Funktion |

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

void OnTick()

{

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

//offener Verkauf

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

MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1);

if(CountTrades() <= 0&MaRSI<=30 )

{

if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0, "test",Magic,0,Green))

{ int ticket = OrderTicket();

SL = NormalizeDouble( Ask - StopLoss*Point,Digits);

TP = NormalizeDouble( Ask + TakeProfit*Point,Digits);

ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black);

}

}// if(CountTrades <= 0&MaRSI>=70 )

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

//offen kaufen

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


}//ONTICK


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

//+Bestellzähler

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


int CountTrades ()

{

int count = 0;

for(int i = OrdersTotal()-1;i>=0;i--)

{

if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//wenn die Bestellung unsere ist

count++;//Zähler erhöhen

}//auswählen nach Index

}// Bestellung.i===erste Bestellung.

return(count);//Zurückgeben der Anzahl der Bestellungen

}// Funktion

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

//Auftragsvergabefunktion mit Fehlerbehandlung

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

int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,

double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)

{

int err = GetLastError();

err =0;

bool exit_cikl = false;

int ticket = -1;

int Retry = 10; //Anzahl der Versuche, eine Bestellung zu setzen

int cnt = 0; //Versuchsanzahl

if(cmd == OP_BUY || cmd == OP_SELL)

{

while(!exit_cikl)

{

ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);

err= GetLastError();

switch(err)

{

case ERR_NO_ERROR:

exit_cikl = true;

Pause;

{ case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

Fall ERR_BROKER_BUSY:

Fall ERR_TRADE_CONTEXT_BUSY:

cnt++;

Pause;

case ERR_PRICE_CHANGED:

Fall ERR_REQUOTE:

RefreshRates();

weiter;

Standard:

exit_cikl = true;

Pause;

}// switch switch(err)

if(cnt > Wiederholungsversuch)

exit_cikl = true;

if(!exit_cikl)

{

Sleep(1000);

RefreshRates();

}//falls wir die Schleife nicht verlassen if(!exit_cikl)

sonst

{

if(err != ERR_NO_ERROR)

{

Print("Fehler : " + IntegerToString(err));

}// falls immer noch ein Fehler auftritt if(err != ERR_NO_ERROR)

}// SONSTIGES

if(err==ERR_NO_ERROR)

{

if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)

zurück(ticket);

}// if(err==ERR_NO_ERROR)

Print("Fehler beim Öffnen der Bestellung nach " + IntegerToString(cnt) +"Versuchen");

zurück(-1);

} //Zyklus während

}// wenn die Auftragsart Kaufen oder Verkaufen ist

zurück(ticket);

}// Funktion SendOrder


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

//Funktion Auftrag ändern

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

ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime expiration,colour arrow_color)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

Preis = NormalizeDouble(Preis,Ziffern);

stoploss = NormalizeDouble(stoploss,Digits);

Gewinnspanne = NormalizeDouble(Gewinnspanne,Stellen);

CheckValidStop(Symbol(),Preis,Stoploss);//Funktion zum Ändern des Mindeststopps

int err = GetLastError();

err = 0 ;

int Wiederholungsversuch = 10;

int cnt = 0;

bool exit_cikl = false;

bool Ergebnis;

while(!exit_cikl)

{

Ergebnis = OrderModify(Ticket, Preis,Stoploss,Takeprofit,Ablauf, arrow_color);

err = GetLastError();

if(Ergebnis == true)

{

Print("Auftrag #"+ IntegerToString(ticket), "erfolgreich geändert");

return(true);

}

switch(err)

{

case ERR_NO_ERROR:

exit_cikl = true;

Pause;

{ case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

Fall ERR_BROKER_BUSY:

Fall ERR_TRADE_CONTEXT_BUSY:

cnt++;

Pause;

case ERR_PRICE_CHANGED:

Fall ERR_REQUOTE:

RefreshRates();

weiter;

Standard:

exit_cikl = true;

Pause;

}// switch switch(err)

}// while(!exit_cikl)

if ( err != ERR_NO_ERROR)

{

Print("Fehler beim Ändern der Bestellung # " + IntegerToString(ticket));

Print("Fehlercode: " + IntegerToString(err));

}

}///(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

sonst

{

Print("Auftragsauswahl fehlgeschlagen, Ticket = " + IntegerToString(ticket));

return(false);

}//falls etwas schief geht

return(true);

}// Funktion ändern

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

//ChtckValidStop

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

void CheckValidStop(string symbol,double price,double& sl)

{

if(sl==0)

Rückkehr;

double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT);

if(MathAbs(preis-sl) <= min_stop_server)

{

if(Preis>sl)

sl = Preis - min_stop_server;

sonst sl = sl + min_stop_server;

}// if(MathAbs(Preis-sl) <= min_stop_server)

sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))

}// Funktion


 

BITTE UM RAT!!!

Es gibt zwei Aufträge in der Handelshistorie: 1) SELL № tic 415 STOPLOSS 1.1000 lot 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lot 0.02

Ich muss die Variablen X=Tick, Y=STOPLOSS und B=Lot zuweisen, wenn der Asc-Preis gleich dem STOPLOSS der SELL-Order ist. Wie werden die ersten Werte dem ersten Auftrag und dann dem zweiten Auftrag zugeordnet? Bei mir wird dem ersten Auftrag immer ein Wert zugewiesen.

 
m8akca:

BITTE UM RAT!!!

Es gibt zwei Aufträge in der Handelshistorie: 1) SELL № tic 415 STOPLOSS 1.1000 lot 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lot 0.02

Ich muss die Variablen X=Tick, Y=STOPLOSS und B=Lot zuweisen, wenn der Asc-Preis gleich dem STOPLOSS der SELL-Order ist. Wie werden die ersten Werte dem ersten Auftrag und dann dem zweiten Auftrag zugeordnet? Bei mir wird dem ersten Auftrag immer ein Wert zugewiesen.

Dieses Thema soll denjenigen helfen, die bereits etwas geschrieben haben, aber es funktioniert nicht ganz so, wie ich es möchte. Bitte übermitteln Sie Ihren Code, damit die anderen hier sehen können, was falsch ist und helfen können.

Und wenn Sie auf Bestellung geschrieben werden wollen, dann ist das genau das Richtige für Sie.