[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 880

 
FoxUA:

tal vez no quise decir exactamente, necesito que la variable BalansEURUSD muestre las ganancias o pérdidas en porcentajes "BalansEURUSD =5%", así

y así en unos cuantos pares más digamos la libra y el dolar

una vez


Esto es más difícil, pero se puede calcular:

Para una orden de VENTA

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

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

para comprar:

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

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

estas son las fórmulas completas para calcular el beneficio de la orden + el margen para esta orden, el margen debe tenerse en cuenta, ya que si la orden se cierra, el margen liberado se sumará al saldo, el dinero aumentará numéricamente, pero el beneficio real puede no haber sido

 

Chicos, por favor, aconsejen cómo activar una orden pendiente y colocar otra ?????? Lo he intentado a través de order select, pero no funciona ........
después de
order type == buy, // donde buystop estaba antes
open pending order // (no se abre)

 
VOLDEMAR:

¿Pueden decirme cómo activar una orden pendiente y colocar otra? ?????? He intentado hacerlo a través de order select pero no ha funcionado ........
después de
tipo de orden == comprar, // donde comprar era previamente bystop
abrir una orden pendiente // (no se abre)


Si lo hay, significa que la orden pendiente (que se estableció antes) se ha convertido en comercializable, entonces coloque la siguiente orden (otra orden pendiente que necesite, por ejemplo: si la orden de compra está en el mercado, entonces coloque un bystop, etc.). Recomiendo leer

en el sitio web de alpari - formación en forex - manual del operador - autotrading MKL4 (panel izquierdo) - asesores de trading - (orderselect, ordersend, operadores condicionales, etc.)

http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/ - concisa e informativa...

 

Estoy tratando de aprender a programar. Por favor, dígame, sospecho que la siguiente condición nunca se satisface en el Asesor Experto

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

¿Cómo se puede comprobar esto? ¿Qué métodos existen? ¿Y es posible cuando las garrapatas no funcionan?

 

Queridos expertos Estoy aprendiendo a escribir un EA. Funciona, pero no todo. Los bloques de modificación y cierre de órdenes no funcionan. No puedo encontrar la razón. Pido ayuda.

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

Estoy pidiendo ayuda.

 
fanat:

Queridos expertos Estoy aprendiendo a escribir un EA. Funciona, pero no todo. Los bloques de modificación y cierre de órdenes no funcionan. No puedo encontrar la razón. Pido ayuda.

Estoy pidiendo ayuda.


Quizá sea el momento de familiarizarse con las funciones.
 

este es el problema :

MathSrand(TimeLocal());

int periodRandom=período+ MathRand()/10000;
int period2Random=período2+ MathRand()/10000;

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

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

Decidí cambiar aleatoriamente el período de la ondulación - período más un valor aleatorio de 0 a 3.

Pero en el probador la ejecución muestra siempre el mismo valor de beneficio. Tal vez el período no cambia, ¿Qué he guardado mal?

 

La pregunta es sencilla: ¿es posible establecer la segunda dimensión de un array bidimensional no mediante una constante?

Es decir, debería hacer así: double massiv[5][5], pero yo quiero double massiv[5][k], donde k es un valor entero conocido establecido anteriormente, por ejemplo, mediante extern int k = 5. La primera dimensión se puede cambiar con la función ArrayResize, pero la segunda no se puede cambiar por alguna razón...

 
fru1t:

Buenas tardes, mi pregunta es sencilla: ¿es posible especificar de alguna manera la segunda dimensión de un array bidimensional que no sea a través de una constante?

Es decir, debería hacer así: double massiv[5][5], pero quiero double massiv[5][k], donde k es un entero conocido, definido antes, por ejemplo, mediante extern int k = 5. La primera dimensión se puede cambiar con la función ArrayResize, pero la segunda no se puede cambiar por alguna razón...


#define k 5

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

 

Hola, expertos.

Por favor, explique cómo eliminar la información de la subventana del indicador en la parte superior izquierda.

Está en el camino.