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

 

Boa tarde, você poderia me dizer se existe um código


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер
if (OrderType()==OP_BUY||OP_SELL)
 {
 if (OrderMagicNumber()==1)
  {
  if (OrderProfit()<0)

   {

que selecionará a última ordem da história com um lucro negativo.

Se existe uma situação em que 3 ordens são fechadas ao mesmo tempo, como sei que as últimas 3 ordens foram fechadas ao mesmo tempo?

eu tentei fazer o loop for loop, mas ele encontra todos os pedidos fechados com prejuízo, enquanto eu preciso apenas do último pedido ou do último pedido, dependendo de quantos deles fechados de uma vez

 
BruDer:

Eu não encontrei uma resposta na busca

como posso ver no script quais indicadores estão no gráfico, quais parâmetros e indicadores, em quais subwindows eles estão localizados?

obrigado


De jeito nenhum.
 

vik-777:

como sei que os 3 últimos fecharam ao mesmo tempo?

OrderCloseTime()
 
vik-777:

Boa tarde, você poderia me dizer se existe um código


que selecionará a última ordem da história com um lucro negativo.

Se existe uma situação em que 3 ordens são fechadas ao mesmo tempo, como sei que as últimas 3 ordens foram fechadas ao mesmo tempo?

eu tentei fazer o loop for loop, mas ele encontra todos os pedidos fechados com prejuízo, enquanto eu preciso apenas do último pedido ou do último pedido, dependendo de quantos deles fechados de uma vez




Se for o mesmo, então você o compara com a hora de fechamento de seu pedido anterior fechado... assim, naturalmente, está tudo em loop - desde o último fechado até o primeiro, você vai em seqüência e compara o tempo de fechamento dos pedidos Outra coisa - imprima o horário de fechamento das últimas ordens que você conhece de antemão, digamos três ordens , pode ser diferente, mesmo que você o entenda como " simultaneamente", ou seja, como eu o entendo, a ordem fecha a qualquer momento, ou seja Na verdade, o tempo de fechamento de, digamos, três ordens ao mesmo tempo não pode ser o mesmo - tente imprimir () e ver os valores de suas três ordens TIME - seus valores de características OrderCloseTime(), ou seja, podemos ter que introduzir o conceito de TIME de fechamento, ou seja, desvio do tempo de fechamento de várias ordens por algum valor pequeno quando podemos considerar que elas fecharam simultaneamente. Experimentem e vejam por vocês mesmos a partir daqui.
 

Levando ajuda do salão.

Como escrever uma condição na OrderSelect():

if(pedido dia de abertura != dia de hoje)ticket=OrderTicket();

 
if(TimeDay(OrderOpenTime())!=TimeDay(CurrentTime()))ticket=OrderTicket();
 
ikatsko:

COMO VOCÊ CONTARIA SEPARADAMENTE O NÚMERO DE POSIÇÕES LONGAS LUCRATIVAS E O NÚMERO DE POSIÇÕES CURTAS LUCRATIVAS?

A estratégia é a seguinte: se o número de posições longas lucrativas desde o início do Expert Advisor (ou melhor - para todo o histórico da conta) for maior do que o número de posições curtas, então somente posições longas devem ser permitidas para abertura. E vice versa.

É claro como contar estes negócios, se eles forem fechados pelo Consultor Especialista: Fechar - Contar. Mas se uma posição é fechada por TP ou SL, então ... ?

Talvez alguém tenha um código pronto da função?

Bem, compare em um loop sobre posições fechadas seu preço fechado e seus preços de take and stop:

OrderTakeProfit(); OrderStopLoss(); OrderClosePrice();

E é ainda mais fácil selecionar OP_BUY e OP_SELL e escrever em quatro variáveis separadas o número de posições de compra e venda perdidas e lucrativas

se (OrderProfit()+OrderSwap()+OrderComission()>0) { /* position is profitable */ }
else { /* position is losing */ }

 
Obrigado!
 

Olhei para tudo, fiz de tudo... Não vai abrir uma posição, só isso! Fecha corretamente, mas não abre... Eu não sei o que fazer! Talvez alguém encontre um bug no programa?

 
//+------------------------------------------------------------------+
//|                                                     DOKTRADE.mq4 |
//|                                                DOKSTER@YANDEX.RU |
//|                                                DOKSTER@YANDEX.RU |
//+------------------------------------------------------------------+
#property copyright "DOKSTER@YANDEX.RU"
#property link      "DOKSTER@YANDEX.RU"

   extern double LOT = 0.01;   // LOTS
   extern double KOF = 2;
   extern double SAF = 5;
   extern int    FRC = 144;
   extern double STL = 100;
   extern double TPF = 100;
   
   int start()
     
    { 


int CNT;

int DIG;

int TOTAL;
int SPREAD;

double SPR;
double SPRW;

double FRCU;
double FRCD;

double EMAH;
double EMAM;
double EMAL;

double OPEN;
double CLOSE;

double DFB;
double DFS;

double STLW = STL*Point;
double TPFW = TPF*Point;

double SAFW = SAF*Point;

EMAH = iMA(NULL,0,34,8,MODE_SMA,PRICE_HIGH,1);
EMAM = iMA(NULL,0,34,8,MODE_SMA,PRICE_MEDIAN,1);
EMAL = iMA(NULL,0,34,8,MODE_SMA,PRICE_LOW,1);

OPEN = iOpen(NULL,0,1);
CLOSE = iClose(NULL,0,1);

FRCU = High[iHighest(NULL,0,MODE_HIGH,FRC,1)];
FRCD = Low[iLowest(NULL,0,MODE_LOW,FRC,1)];

DFB = (CLOSE-FRCD);
DFS = (FRCU-CLOSE);

SPR = MarketInfo(Symbol(),MODE_SPREAD);
SPRW = (SPR*Point);

DIG = MarketInfo(Symbol(),MODE_DIGITS);

TOTAL = OrdersTotal();


if(TOTAL<1)

 { if (OPEN<EMAH&&CLOSE>EMAH)
   
   OrderSend(Symbol(),OP_BUY,LOT,Ask,3,0,0,"DOKTRADE",15775,0,Green);
  
 
   if (OPEN>EMAL&&CLOSE<EMAL)
 
   OrderSend(Symbol(),OP_SELL,LOT,Bid,3,0,0,"DOKTRADE",15885,0,Red);
  
  return(0);
 
    }
    
           
      
  for(CNT=0;CNT<TOTAL;CNT++)    
  
  {
      
  OrderSelect(CNT,SELECT_BY_POS,MODE_TRADES);
  
  {
  
  if (OrderType()==OP_BUY && OrderSymbol()==Symbol())   
                                             
      {
      
       if (OPEN>EMAL&&CLOSE<EMAL)    
     
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
        
         if (OPEN>EMAM&&CLOSE>EMAM)
          
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCD-SAFW,CLOSE+DFB,Green);
        
        return(0);
        
        }
        
  if (OrderType()==OP_SELL && OrderSymbol()==Symbol())
        
      {
       
         if (OPEN<EMAH&&CLOSE>EMAH)
         
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
         
          if (OPEN<EMAM&&CLOSE<EMAM)
           
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCU+(SAFW+SPRW),CLOSE-DFS,Red);
       
         return(0);
         
         }
          }
           }
            }