como posso obter o preço mais alto após a abertura do pedido. - página 5

 

Você quer dizer:

double LastOpenPrice(int ordertype)    { 
double OpenPrice;                            
datetime lastOpen;    
for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)       
if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
    &&OrderMagicNumber() == MagicNumberLong || MagicNumberShort // my magic number
    &&OrderSymbol() == Symbol()    // and my pair.
    &&OrderType() == ordertype       
    &&OrderOpenTime() > lastOpen )  {        
            if(OpenPrice = OrderOpenPrice()&&OpenPrice!=0)          
               break;          }
               return (OpenPrice);} //  
Por favor, eu preciso ver seu sulotion
 
Hand:

Por favor, eu preciso ver seu sulotion

NÃO. . você precisa aprender . . . fazer algum esforço para uma mudança, leia o livro ( https://book.mql4.com// ) leia a Documentação ( https://docs.mql4.com// ) . . ter números mágicos diferentes para o comércio longo e ordenado é idiota e NÃO é necessário . . .
 

talvez por esta via funcione .

if ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELLL)>0) ) <--------------- 0+0,0030=0,0030<Bid: VERDADEIRO // eu acho que vai funcionar
{ COMPRAR("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"se (

 
Hand:

talvez por esta via funcione .

if ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELLL)>0) ) <--------------- 0+0,0030=0,0030<Bid: VERDADEIRO // eu acho que vai funcionar
{ COMPRAR("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"se (

quando pergunto "qual é o seu plano de jogo", estou falando sério. Para refazer a frase, qual é sua ESTRATÉGIA?

Se você NÃO quer TRADUZIR quando não há um último preço aberto, pode considerar como tal?

if(LastOpenPrice(OP_SELL) <=0) { devolver? fazer o quê? ----- caso de venda

if(LastOpenPrice(OP_BUY) <=0) { retornar?...ou fazer o quê? ------ caso para compra

então, o resto do código procede....

com um erro como este, receio que você não possa "preencher os buracos" aqui e ali em seus códigos. Sua estratégia parece arruinada.

Este tipo de erro "informa" você precisa rever a estratégia a um nível superior ---> QUANDO negociar (e quando não o fizer). Você tem respostas, idéias, etc., para isso?

 
Hand:

Você quer dizer:

Por favor, eu preciso ver seu sulotion

Eu esqueci completamente de mencionar isto, mas isto é o mais importante para a totalidade, e para a eternidade das coisas relacionadas. É uma loucura total que VOCÊ tenha a idéia de ver a MINHA = SUA solução, o que eu não vejo.

Onde no planeta Terra, você está? Quem você pensa que eu sou? Seu anjo da guarda, xamã, gênio pessoal, etc.?

O que quer que você venha a colocar em sua cabeça, eu realmente não posso ajudar, apenas para sua informação.

 

caras,

Favor verificar as funções abaixo (se corretas ou não) preciso fazer estas condições

se ( lastOpenedOpenedPriceBuy()-lastOpenedOpenedPriceSell() )>=0,0060

{façam alguma coisa }

double lastOpenedOpenPriceBuy()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }


double lastOpenedOpenPriceSell()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_SELL && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }



double lastClosedClosePrice()
  {
   double ret = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = OrderClosePrice();
      }
   }
   
   return(ret);
  }



double beforelastClosedClosePrice()
  {
   double ret = 0;
   double ret2 = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = ret2;
         ret2 = OrderClosePrice();
      }
   }
   if(ret==0) {
      ret = ret2;
   }
   
   return(ret);
  }
 

Eu posso ajudar com o primeiro, talvez outros possam vir para o resto.

<-------------------- can consider to use if(OrdersTotal()>0..then proceed  ---------------->
double lastOpenedOpenPriceBuy()  <----- what a name...confusing, maybe.
  {
   double ret = 0;
   datetime time=0; <---- can consider setting Lowest Limit to -9999, at least -1, rather than 0.  
   for(int i=0; i<OrdersTotal(); i++) { <----- do consider counting down.
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ This returns some BOOLEAN result.then what? -----(?)
      if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ This can return runtime OrderSelect ERR bec. of above line (?). ------ (!) 
         time = OrderOpenTime(); 
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);<------ return double as UnNormalized price. you sure about this?
  }

 

Por favor, note que:

quando eu coloco esta condecoração

if (  ((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}

não funciona, mas quando eu acrescentei mais uma condicção

if (  (lastOpenedOpenPriceBuy()>0)&&((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}
parece fino (lastOpenedOpenPriceBuy()>0)
 
<-------------------- pode considerar usar if(OrdersTotal()>0...then proceda---------------->
 double  lastOpenedOpenPr iceBuy ()  < que nome...confuso, talvez.
 { double ret = 0; datetimetime=0; < pode considerar definir o Limite mais baixo para -9999, pelo menos -1, ao invés de 0. Nenhum tempo de abertur ade orde m poderia<= 0 para(int i=0; i < OrderTotal(); i++) { < considerar a contagem regressiva .Nada diferente.OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <----- Isto retorna algum resultado BOOLEAN.then what? -----(?) Se no laço, a ordem deve existir, quando a ordem existe, a OrderSelect não causará erro. Se não estiver no laço, esta linha não será executada.if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ Isto pode retornar o tempo de execução OrderSelect ERR por causa da linha acima (?). ------ (!) A mesma razão da última linha.
tempo = OrderOpenTime(); ret = OrderOpenPrice
(); } }return(ret);< return double como preço não-normalizado . você tem certeza disso?Já define ret = 0 na primeira linha.}
 

Caramba, você é simplesmente incrível. Coisas para apontar esses para fora esp, isto:

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); < Se no loop, a ordem deve existir, quando a ordem existe, a OrderSelect não causará erro. Se não estiver no laço, esta linha não será executada. Acho que esta sua linha tem alguns poderes de Houdini para desaparecer do laço quando não há ordens, reaparecendo quando há.