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

 
FoxUA:

Vielleicht habe ich nicht genau gemeint, ich brauche die Variable BalansEURUSD, um Gewinne oder Verluste in Prozenten anzuzeigen "BalansEURUSD =5%", wie dies

und so weiter ein paar weitere Paare, sagen wir das Pfund und die Doloräne

einmalig


Dies ist schwieriger, aber es kann berechnet werden:

Für einen SELL-Auftrag

profit=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2);

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_SELL,OrderLots(),2);

für BUY:

profit=NormalizeDouble((Bid-OrderOpenPrice())*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2);

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_BUY,OrderLots(),2);

Dies sind vollständige Formeln zur Berechnung des Gewinns der Bestellung + Marge für diese Bestellung, die Marge sollte berücksichtigt werden, denn wenn die Bestellung schließt, wird die freigegebene Marge zum Saldo hinzugefügt, das Geld wird numerisch steigen, aber der tatsächliche Gewinn kann nicht gewesen sein

 

Leute, bitte ratet mal, wie man eine schwebende Order auslöst und eine andere platziert ?????? Ich habe es über Order Select versucht, aber es funktioniert nicht ........
nach
order type == buy, // where buystop was earlier
open pending order // (it does not open)

 
VOLDEMAR:

Könnt ihr mir sagen, wie man eine schwebende Order auslöst und eine andere platziert ?????? Ich habe versucht, es über die Auftragsauswahl zu machen, aber es hat nicht funktioniert ........
nach
Auftragsart == Kauf, // wenn Kauf zuvor durch Stop ersetzt wurde
einen schwebenden Auftrag eröffnen // (wird nicht eröffnet)


Wenn dies der Fall ist, bedeutet dies, dass der (zuvor eingestellte) schwebende Auftrag marktfähig geworden ist. Geben Sie dann den nächsten Auftrag ein (einen anderen schwebenden Auftrag, den Sie benötigen, z.B.: wenn der Kaufauftrag im Markt ist, geben Sie einen By-Stop ein, usw.). Ich empfehle zu lesen

auf der alpari-Website - Forex-Schulung - Händlerhandbuch - Autotrading MKL4 (linke Seite) - Trading Advisors - (Orderselect, Orderend, bedingte Operatoren, usw.)

http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/ - prägnant und informativ...

 

Ich versuche zu lernen, wie man programmiert. Bitte sagen Sie mir, dass ich vermute, dass die folgende Bedingung im Expert Advisor nie erfüllt ist

while (B*Point >zmm)
Comment("Differenzwert ", B);
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+TakeProfit*Point, "macd sample",16384,0,Green);

Wie kann dies überprüft werden? Welche Methoden gibt es? Und ist es möglich, wenn die Zecken nicht funktionieren?

 

Liebe Experten! Ich lerne gerade, einen EA zu schreiben. Es funktioniert, aber nicht alles. Die Blöcke zur Änderung und Schließung von Aufträgen funktionieren nicht. Ich kann den Grund dafür nicht finden. Ich bitte um Hilfe.

//+------------------------------------------------------------------+
//|                                                Monetny dvor1.mq4 |
//|                                                            fanat |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "fanat"
#property link      "http://www.metaquotes.net"

extern int TakeProfit=484; //
extern int StopLoss=89;    //
extern bool BStop=true;    //Включение безубытка
extern int Stop=90;        //            
//+------------------------------------------------------------
int start()
{//1
   
if(TakeProfit<10){Alert("Ошибка,Take слишком близко");return;}
if(StopLoss<10){Alert("Ошибка,StopLoss слишком близко");return;}
   
bool Buy=false;
bool Sell=false;
if(Close[0]>High[1])Buy=true;
if(Close[0]<Low[1])Sell=true;

int err;
int Order_Count[6];
int OP=-1;
ArrayInitialize(Order_Count,0);                             
         
for(int i=0;i<=OrdersTotal();i++)       //
  {//2                                   // Блок учета ордеров
   if(OrderSelect(i,SELECT_BY_POS)==true)//
    {//3                                 //
     Order_Count[OrderType()]++;         //
     if(OP!=-1)return(Order_Count[OP]);  //
    }//3
  }//2  
     if(OrdersTotal()>0)
      {//2
       if(BStop==true&&OrderOpenPrice()!=OrderStopLoss())                                                //Модификация ордеров
        {//3                                                                                             //
         if((OrderType()==0&&(Ask-OrderOpenPrice())>Stop)||(OrderType()==1&&(OrderOpenPrice()-Bid)>Stop))//
          {//4                                                                                           // 
           int ticket=OrderTicket();                                                                     // 
           double Price=OrderOpenPrice();                                                                //
           double SL=OrderOpenPrice();                                                                   //
           double TP=OrderTakeProfit();                                                                  //
           bool Ans=OrderModify(ticket,Price,SL,TP,0);                                                   //
           
           if(Ans==false){err=GetLastError();Alert(err);Sleep(500);return;}                              //Обработка ошибок
          }//4
        }//3
          
                                                                                                                                                                                                                                                                                                                                       // 
       if(OrderType()==1&&(Buy==true||Ask<OrderTakeProfit()||Bid>OrderStopLoss()))      //Условия закрытия ордеров Sell  
        {//3
         ticket=OrderTicket();                             //Закрытие ордеров Sell                                                                         
         double Lots=OrderLots();                          //
         OrderClose(ticket,Lots,Ask,4);                    //
         
         err=GetLastError();                               //Обработка ошибок 
         if(err>0){Alert(err);Sleep(500);return;}          //                                                                              
        }//3
                                                           
       if(OrderType()==0&&(Sell==true||Bid>OrderTakeProfit()||Ask<OrderStopLoss()))      //Условия закрытие ордеров Buy 
       {//3
         ticket=OrderTicket();                             //Закрытие ордеров Buy                   
         Lots=OrderLots();                                 //  
         OrderClose(ticket,Lots,Bid,4);                    //
          
         err=GetLastError();                               //Обработка ошибок
         if(err>0){Alert(err);Sleep(500);return;}          //
       }//3
      }//2 
                   
   if(Buy==false&&Sell==false)return;
   int Total=1;
   double Lot=0.03;                 
/*  if(AccountBalance()>400)Lot=0.04;          //
   if(AccountBalance()>500)Lot=0.05;          //
   if(AccountBalance()>600)Total=2;           //
   if(AccountBalance()>800)Lot=0.04;Total=2;  // Блок вычисления лота для реала
   if(AccountBalance()>1000)Lot=0.05;Total=2; //
   if(AccountBalance()>1200)Lot=0.04;Total=3; //
   if(AccountBalance()>1500)Lot=0.05;Total=3; //
   if(AccountBalance()>1600)Lot=0.04;Total=4; //
   if(AccountBalance()>1800)Lot=0.03;Total=6;*/ //
   
   Lot=0.1;
   if(AccountBalance()>1600)Lot=0.2;
   if(AccountBalance()>2400)Lot=0.3;
                                                                                      
   if(Order_Count[OP_BUY]<Total&&Order_Count[OP_SELL]==0&&Buy==true)                     //Открытие ордеров Buy
   {//2                                                                                  //
      OrderSend(Symbol(), OP_BUY, Lot, Ask, 4, Ask-StopLoss*Point, Ask+TakeProfit*Point);//
       
      err=GetLastError();                                                                //Обработка ошибок
      if(err>0){Alert(err);Sleep(500);}                                                  //
      return;
   }//2         
           
   if(Order_Count[OP_SELL]<Total&&Order_Count[OP_BUY]==0&&Sell==true)                     //Открытие ордеров Sell 
   {//2                                                                                   //
      OrderSend(Symbol(), OP_SELL, Lot, Bid, 4, Bid+StopLoss*Point, Bid-TakeProfit*Point);//
      
      err=GetLastError();                                                                 //Обработка ошибок
      if(err>0){Alert(err);Sleep(500);}                                                   //
   }//2
  
return;
}//1

Ich bitte um Hilfe.

 
fanat:

Liebe Experten! Ich lerne gerade, einen EA zu schreiben. Es funktioniert, aber nicht alles. Die Blöcke zur Änderung und Schließung von Aufträgen funktionieren nicht. Ich kann den Grund dafür nicht finden. Ich bitte um Hilfe.

Ich bitte um Hilfe.


Vielleicht ist es an der Zeit, sich mit den Funktionen vertraut zu machen.
 

Hier ist das Problem:

MathSrand(TimeLocal());

int periodRandom=period+ MathRand()/10000;
int period2Random=period2+ MathRand()/10000;

Moving1=iMA(Symbol(),0,periodRandom,0,MODE_SMA,price,1) ;

Moving2=iMA(Symbol(),0,period2Random,0,MODE_SMA,price,1);

Ich beschloss, die Dauer des Winkens nach dem Zufallsprinzip zu ändern - Dauer plus ein Zufallswert von 0 bis 3.

Aber im Tester zeigt der Lauf immer den gleichen Gewinnwert an. Vielleicht ändert sich der Zeitraum nicht, was habe ich falsch gespeichert?

 

Guten Tag, die Frage ist einfach: Ist es möglich, die zweite Dimension eines zweidimensionalen Arrays nicht über eine Konstante zu setzen?

Das heißt, ich sollte das so machen: double massiv[5][5], aber ich will double massiv[5][k], wobei k ein bekannter ganzzahliger Wert ist, der vorher festgelegt wurde, zum Beispiel durch extern int k = 5. Die erste Dimension kann mit der Funktion ArrayResize geändert werden, aber die zweite kann aus irgendeinem Grund nicht geändert werden...

 
fru1t:

Guten Tag, meine Frage ist einfach: ist es möglich, irgendwie die zweite Dimension eines zweidimensionalen Arrays anders als durch eine Konstante angeben?

Das heißt, ich sollte es so machen: double massiv[5][5], aber ich will double massiv[5][k], wobei k eine bekannte ganze Zahl ist, die vorher definiert wurde, zum Beispiel durch extern int k = 5. Die erste Dimension kann mit der Funktion ArrayResize geändert werden, aber die zweite kann aus irgendeinem Grund nicht geändert werden...


#define k 5

https://docs.mql4.com/ru/basis/preprosessor/constant

 

Hallo, Experten.

Erläutern Sie bitte, wie man die Informationen aus dem Unterfenster des Indikators oben links entfernt.

Sie ist im Weg.