[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 880

 
FoxUA:

talvez eu não quisesse dizer exatamente, eu preciso da variável BalansEURUSD para mostrar lucros ou perdas em porcentagem "BalansEURUSD =5%", como esta

e assim por diante mais alguns pares, digamos a libra e a doloraina

uma vez


isto é mais difícil, mas pode ser calculado:

Para uma ordem de venda

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 são fórmulas completas para calcular o lucro da ordem + margem para esta ordem, a margem deve ser levada em conta, porque se a ordem fechar, a margem liberada será adicionada ao saldo, o dinheiro aumentará numericamente, mas o lucro real pode não ter sido

 

Pessoal, por favor, avisem como acionar um pedido pendente e façam outro ?????? Eu tentei através da seleção de pedidos, mas não funciona
após
tipo de pedido == compra, // onde a compra foi anterior
abrir pedido pendente // (não abre)

 
VOLDEMAR:

Vocês podem me dizer como acionar um pedido pendente e fazer outro ?????? Tentei fazer isso através da seleção de pedidos, mas não funcionou ........
depois de
tipo de pedido == compra, // onde a compra era anteriormente bystop
abrir uma ordem pendente // (não abre)


Se houver, significa que a ordem pendente (que foi definida anteriormente) se tornou comercializável, então coloque a próxima ordem (outra ordem pendente que você precisa, por exemplo: se a ordem de compra está no mercado, então coloque um bystop, etc.). Eu recomendo ler

no site alpari - treinamento forex - manual do trader - autotrading MKL4 (painel à esquerda) - consultores comerciais - (orderselect, orderend, operadores condicionais, etc.)

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

 

Estou tentando aprender como programar. Por favor, me diga, suspeito que a seguinte condição nunca é satisfeita no Expert Advisor

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

Como isso pode ser verificado? Que métodos estão disponíveis? E isso é possível quando os carrapatos não estão funcionando?

 

Caros Especialistas! Estou aprendendo a escrever um EA. Funciona, mas não tudo. Os blocos de modificação e fechamento de pedidos não funcionam. Não consigo encontrar a razão. Eu peço ajuda.

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

Estou pedindo ajuda.

 
fanat:

Caros Especialistas! Estou aprendendo a escrever um EA. Funciona, mas não tudo. Os blocos de modificação e fechamento de pedidos não funcionam. Não consigo encontrar a razão. Eu peço ajuda.

Estou pedindo ajuda.


Talvez seja a hora de se familiarizar com as funções.
 

aqui está o problema :

MathSrand(TimeLocal());

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

Moving1=iMA(Symbol(),0,periodRandom,0,MODE_SMA,preço,1) ;

Moving2=iMA(Symbol(),0,period2Random,0,MODE_SMA,preço,1);

Decidi mudar aleatoriamente o período da ondulação - período mais um valor aleatório de 0 a 3.

Mas no testador, a corrida mostra sempre o mesmo valor de lucro. Talvez o período não mude, O que eu salvei de errado?

 

A pergunta é simples: é possível definir a segunda dimensão de uma matriz bidimensional não através de uma constante?

Ou seja, eu deveria fazê-lo: duplo massivo[5][5], mas eu quero duplo massivo[5][k], onde k é um valor inteiro conhecido definido anteriormente, por exemplo, através de int externo k = 5. A primeira dimensão pode ser alterada com a função ArrayResize, mas a segunda não pode ser alterada por algum motivo...

 
fru1t:

Boa tarde, minha pergunta é simples: é possível especificar de alguma forma a segunda dimensão de uma matriz bidimensional que não seja através de uma constante?

Ou seja, eu deveria fazê-lo: duplo massivo[5][5], mas eu quero duplo massivo[5][k], onde k é um inteiro conhecido, definido anteriormente, por exemplo, através de int externo k = 5. A primeira dimensão pode ser alterada com a função ArrayResize, mas a segunda não pode ser alterada por algum motivo...


#define k 5

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

 

Olá, especialistas.

Favor explicar como remover as informações da subjanela do indicador no canto superior esquerdo.

Isso está no caminho.

Razão: