[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 880

 
FoxUA:

forse non volevo dire esattamente, ho bisogno che la variabile BalansEURUSD mostri i profitti o le perdite in percentuale "BalansEURUSD =5%", come questo

e così via qualche altra coppia diciamo la sterlina e il dollaro

una volta


Questo è più difficile, ma può essere calcolato:

Per un ordine SELL

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

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

per COMPRARE:

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

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

queste sono formule complete per calcolare il profitto dell'ordine + margine per questo ordine, il margine deve essere preso in considerazione, perché se l'ordine si chiude, il margine rilasciato sarà aggiunto al saldo, il denaro aumenterà numericamente, ma il profitto reale potrebbe non essere stato

 

Ragazzi, per favore consigliate come attivare un ordine pendente e piazzarne un altro ?????? Ho provato attraverso order select, ma non funziona ........
dopo
order type == buy, // dove buystop era prima
open pending order // (non si apre)

 
VOLDEMAR:

Potete dirmi come attivare un ordine pendente e piazzarne un altro ?????? Ho provato a farlo attraverso order select ma non ha funzionato ........
dopo
tipo di ordine == buy, // dove buy era precedentemente bystop
aprire un ordine in sospeso // (non si apre)


Se c'è, significa che l'ordine pendente (che è stato impostato in precedenza) è diventato commerciabile, quindi piazzare l'ordine successivo (un altro ordine pendente di cui hai bisogno, per esempio: se l'ordine di acquisto è a mercato, allora piazza un bystop, ecc.) Raccomando di leggere

sul sito alpari - formazione forex - manuale del trader - autotrading MKL4 (pannello di sinistra) - consigli di trading - (orderselect, ordersend, operatori condizionali, ecc.)

http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/ - conciso e informativo...

 

Sto cercando di imparare a programmare. Per favore ditemi, ho il sospetto che la seguente condizione non sia mai soddisfatta nell'Expert Advisor

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

Come si può controllare? Quali metodi sono disponibili? Ed è possibile quando le zecche non funzionano?

 

Cari esperti! Sto imparando a scrivere un EA. Funziona, ma non tutto. I blocchi di modifica e chiusura degli ordini non funzionano. Non riesco a trovare la ragione. Chiedo aiuto.

//+------------------------------------------------------------------+
//|                                                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

Sto chiedendo aiuto.

 
fanat:

Cari esperti! Sto imparando a scrivere un EA. Funziona, ma non tutto. I blocchi di modifica e chiusura degli ordini non funzionano. Non riesco a trovare la ragione. Chiedo aiuto.

Sto chiedendo aiuto.


Forse è il momento di familiarizzare con le funzioni.
 

Ecco il problema:

MathSrand(TimeLocal());

int periodRandom=periodo+ MathRand()/10000;
int period2Random=periodo2+ MathRand()/10000;

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

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

Ho deciso di cambiare a caso il periodo dell'ondeggiamento - periodo più un valore casuale da 0 a 3.

Ma nel tester la corsa mostra sempre lo stesso valore di profitto. Forse il periodo non cambia, Cosa ho salvato di sbagliato?

 

La domanda è semplice: è possibile impostare la seconda dimensione di un array bidimensionale non tramite costante?

Cioè, dovrei fare così: double massiv[5][5], ma voglio double massiv[5][k], dove k è un intero noto, definito prima, per esempio, attraverso extern int k = 5. La prima dimensione può essere cambiata con la funzione ArrayResize, ma la seconda non può essere cambiata per qualche motivo...

 
fru1t:

Buon pomeriggio, la mia domanda è semplice: è possibile specificare in qualche modo la seconda dimensione di un array bidimensionale oltre che attraverso una costante?

Cioè, dovrei fare così: double massiv[5][5], ma voglio double massiv[5][k], dove k è un intero noto, definito prima, per esempio, attraverso extern int k = 5. La prima dimensione può essere cambiata con la funzione ArrayResize, ma la seconda non può essere cambiata per qualche motivo...


#define k 5

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

 

Salve, esperti.

Per favore, spiega come rimuovere le informazioni dalla sottofinestra dell'indicatore in alto a sinistra.

È in mezzo ai piedi.

Motivazione: