Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 415

 
Link_x:
Olá!
Existe tal função na função "Kim" que calcula a quantidade de lucro da última ordem aberta?

Ainda não o encontrei, agora estou intrigado com uma função caseira que calcula a margem de lucro da última ordem aberta.


OrderProfit()

Se você precisar exatamente do último pedido aberto, então passe por todos os pedidos e escolha o último, cujo tempo é o mais recente, então use a função acima, que retornará a você o lucro líquido deste pedido

 
Ekburg:


OrderProfit()

Se você precisar exatamente da última ordem para abrir, então passe por todas as ordens e escolha aquela com o último tempo aberto, então use a função acima, que retornará a você o lucro líquido desta ordem


Como consigo uma resposta na hora certa, no momento exato em que encontro uma solução. :)
Pips_Proffit_Last_Pos = p - PriceOpenLastPos;
Mas obrigado de qualquer forma!
 

Ekburg К сожалению времени и возможности написать Вам готовый код нет, так как я на работе нахожусь))

Você não busca pela história, mas pelas posições atuais, aqui está uma cadeia lógica baseada na qual você pode tentar escrever código:

[bloco de trabalho com muwings e pedido].

1 lembre-se do bilhete e do número mágico do pedido feito

2 monitorar o número de ordens e se não houver ordens no mercado (significa que nossa ordem foi fechada), então vá para o ponto3 ou monitore esta ordem específica até que seu tempo de fechamento seja maior que zero, neste caso, excluímos os pontos 3 e 4

3 encontre nosso pedido

4 descubra se está fechado

5 descubra como foi fechado

6 se foi fechado através de uma parada, estabeleça outra ordem diferente na direção


//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


extern double Lots = 0.1;
extern double TakeProfit = 100;
extern double StopLoss = 100;       
extern double TrailingStop = 50;
extern double Margincutoff = 100;   
extern double MagicNumber = 12345;
extern double TradeSizePercent = 5;
extern int Slippage = 10;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
  int Crossed (double line1, double line2)
  {
  static int last_direction=0;
  static int current_direction=0;
  
  if (line1>line2)current_direction=1;// пересечение вверх
  if (line1<line2)current_direction=2;// пересечение вниз
  
  if (current_direction!=last_direction)//изменения произошли
  {
  last_direction=current_direction;
  return(last_direction);
  }
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    int cnt, ticket, total, totalhistory, memoryticket;
    double shortEMA, longEMA;
    
    if(Bars<100) 
     {
     Print("Bars less than 100");
     return(0);
     }
     shortEMA=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
     longEMA=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
     int isCrossed=Crossed(shortEMA, longEMA);
//----
   total=OrdersTotal();
   if(total<1) 
     {
      // нет открытых ордеров
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // проверяем пересечение МА для открытия позиции на покупку
      if(isCrossed==1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
        //проверяем пересечение МА для открытия позиции на продажу
        if(isCrossed==2)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
         return(0); 
        }  
//----начинаем искать закрытые ордера

         //инициализация параметров
  
  int old_order_type;
 
   
  RefreshRates();
  
  //нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
  for ( totalhistory = OrdersHistoryTotal() - 1; totalhistory >= 0; totalhistory-- ) 
  {
     if ( OrderSelect(totalhistory, SELECT_BY_TICKET, MODE_HISTORY) && OrderTicket() == memoryticket && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         old_order_type = OrderType();
         if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         {
                break; //прекращаем поиск
         }
     }
  }
  //если раньше покупали, то теперь продаем
  if ( old_order_type == OP_BUY )
  {
  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
 //если раньше продавали, то теперь покупаем
  if ( old_order_type == OP_SELL )
  {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
   return(0);
  }
//+------------------------------------------------------------------+
Isto é o que eu tenho. Realmente abre 3 lotes. Estou realmente ferrado. Você pode corrigir o código? O que está errado?
 
Estou cansado de fazer estas perguntas (incrivelmente irritante, pi****, desculpe (porra de variáveis que não consigo encontrar (a maioria irritante, o que eu mesmo não consigo encontrar))).

Qual variável é responsável pelo valor do preço atual?
Pesquisei a documentação, não há nada exceto Bid, Ask, POINT_HIGH, POINT_LOW.
Essa variável existe mesmo?
 
Link_x:
Estou cansado de fazer estas perguntas (incrivelmente irritante, pi****, desculpe (porra de variáveis que não consigo encontrar (a maioria irritante, o que eu mesmo não consigo encontrar))).

Qual variável é responsável pelo valor do preço atual?
Pesquisei a documentação, não há nada exceto Bid, Ask, POINT_HIGH, POINT_LOW.
Essa variável existe mesmo?
Você já notou como o preço muda na janela "Market Watch"? Você pode ver ali os preços de compra e venda. O primeiro é usado para vender e o segundo para comprar.
 
Link_x:

Quão oportuno eu recebo uma resposta, justamente quando eu encontro uma solução. :)
A solução é: "Leve seu tempo para fazer perguntas". E, considerando que você nem sempre obtém respostas competentes... :)))
 
khorosh:
Você já notou como o preço muda na janela de observação do mercado? Aí você pode ver o Bid and Ask - estes são os preços atuais. O primeiro é usado para vender e o segundo para comprar.

Exatamente!
Esqueci-me de uma coisa tão pequena!
 
TarasBY:
A solução é: "Não tenha pressa em fazer perguntas". E, considerando que você nem sempre obtém respostas competentes... :)))
Sim, sim. :)
 
Link_x:
É isso mesmo!!!
Esqueci uma coisinha dessas!!!

Você responde corretamente, como um verdadeiro estudante em um exame: você não pode dizer que eu não sei - você tem que dizer que eu esqueci)))))
 
Link_x:
Sim, sim. :)

Talvez você devesse tentar responder às perguntas dos outros em vez de fazer as suas próprias perguntas. Os benefícios são muito maiores (até certo ponto), certamente os benefícios para você