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

 

Hallo zusammen. Ich möchte Ihnen helfen, die aktuelle Situation zu verstehen.

warum in einem Fall, testF2, wenn ich Buf0[i]=iCCI(NULL,0,8,PREIS_ÖFFNEN,i-1)-iCCI(NULL,0,8,PREIS_ÖFFNEN,i) nehme, alles so läuft wie es sollte,

aber in einem anderen Fall, testF1, mit den gleichen Aktionen Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i); der letzte Balken ist kollabiert? warum es nicht mit iCCI aber mit iMA kollabiert bar?????? passieren

Gibt es eine Möglichkeit, das Problem zu beheben?

Dateien:
testf1.mq4  1 kb
testf2.mq4  1 kb
 

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

damit yem unendlich ist, wird bei der Berechnung von -1 bar bei i=0 ein Fehler auftreten

Es ist besser so:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

und wenn Sie eine Verschiebung wie in der von Ihnen zitierten Variante um 1-n Takte nach rechts benötigen, implementieren Sie dies besser explizit im Init über SetIndexShift(0,1);

 
ALXIMIKS:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

damit yem unendlich ist, wird bei der Berechnung von -1 bar bei i=0 ein Fehler auftreten

Es ist besser so:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

und wenn Sie eine Verschiebung wie in der von Ihnen zitierten Variante um 1-n Takte nach rechts benötigen, implementieren Sie dies besser explizit im Init über SetIndexShift(0,1);



Vielen Dank, aber ich verstehe das alles sehr gut, aber warum ist es mit iCCI in Ordnung und mit iMA nicht?
 
       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {   
                sl=NormalizeDouble(Bid-dist*Point,Digits); 
Ekburg
:


Sie berechnen den Abstand zwischen dem Kurs und dem Preis der Auftragserteilung, und Sie brauchen den Abstand zwischen dem Kurs und dem aktuellen Stopp).

Wenn eine Short-Position besteht, wird sie zum ersten Block geleitet, wenn eine Long-Position besteht, wird sie zum zweiten Block geleitet, und dann werden die Trailing-Stops gesetzt.

Wenn Shorts gut sind, gehen sie in den ersten Block, wenn Long, dann in den zweiten, danach die Berechnungen, Kontrollen und die Trailing Stops.


Ich kann es immer noch nicht tun... Ich versuche nur lange, ich habe so viele Dinge versucht, ich kann mich nicht erinnern, was ich gemacht habe))
 
clubsmi:


Vielen Dank, aber ich verstehe es perfekt, aber warum funktioniert es mit iCCI und nicht mit iMA?


Es gab hier und da Fehler, aber bei iCCI ist das wegen der Besonderheiten der Berechnungen nicht offensichtlich,

und die Anwendung der MAs, insbesondere der EMAs, führt meiner Meinung nach zu ihrer Sichtbarkeit.

 
vadynik:

trotzdem kommt nichts heraus... Ich versuche nur, lange, ich habe so viele Dinge versucht, ich weiß nicht mehr, was ich getan habe))

OrderStopLoss() anstelle von sl einsetzen
 
Vinin:

Werden Sie von Trinkgeldern leben?
Bis ich ein Experte auf diesem Gebiet bin.
Sie brauchen doch kein Trinkgeld mehr, oder? :)
 

Es gibt ein Programm, das zwei Kauf- oder Verkaufsaufträge eröffnet, beispielsweise für EURAUD und AUDUSD. Das Programm funktioniert nur, wenn im Terminal keine offenen Aufträge für diese oder andere Paare vorhanden sind. Wenn mindestens ein Auftrag im Terminal vorhanden ist, wird der Handel nicht eröffnet. Meine Frage ist, wie man die Eröffnung von Aufträgen programmieren kann, unabhängig davon, ob es offene Aufträge im Terminal gibt oder nicht. Ich danke Ihnen im Voraus für Ihre Antwort.

extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}
if(OrdersTotal()==0)
{
 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
}  
   return(0);
  }
 
alexey1979621:

Es gibt ein Programm, das zwei Kauf- oder Verkaufsaufträge eröffnet, zum Beispiel für EURAUD und AUDUSD. Das Programm funktioniert nur, wenn im Terminal keine offenen Aufträge für diese oder andere Paare vorhanden sind. Wenn mindestens ein Auftrag im Terminal vorhanden ist, wird der Handel nicht eröffnet. Meine Frage ist, wie man die Eröffnung von Aufträgen programmieren kann, unabhängig davon, ob es offene Aufträge im Terminal gibt oder nicht. Ich danke Ihnen im Voraus für Ihre Antwort.


Scheck entfernen
if(OrdersTotal()==0)
 
evillive:

Entfernen Sie den Scheck
Ja, jetzt schon, aber es werden eine ganze Reihe von Geschäften eröffnet, während ich nur zwei Geschäfte für die angegebenen Paare, z. B. für EURAUD und AUDUSD, eröffnen muss.