[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 768

 
FoxUA:


Ho solo bisogno di chiamare la funzione, è tutto ciò di cui ho bisogno è una linea "Se ci sono più ordini di uno .... e questo è tutto" - e tu mi stai offrendo un'intera funzione

Ecco come memorizzo i dati del mio ordine


È semplice, mettetelo nella biblioteca.

Il tipo di ordine da contare e il suo master sono dati come input, restituisce il numero di ordini aperti o impostati.

int ChPos( int TypePos,int Magic) 
{
// возвращает кол-во позицй которые открыты или выставленн отложками с магиком  Magic 
   int i;
   int count=0 ;
   for( i=0; i < OrdersTotal(); i++)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;}
       }
    }   
return(count);
}

Potete usarlo nel seguente modo

se ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

 
ivandurak:


Non è complicato metterlo nella biblioteca.

L'input è il tipo di ordine da contare e il suo master, restituisce il numero di ordini aperti o impostati.

Questo può essere usato nel seguente modo

se ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

Ho una tale funzione e non ne ho bisogno, ho solo bisogno di
solo una linea "se ci sono più ordini di uno .... poi" e questo è tutto

i miei dati per la stessa funzione che hai mostrato sono memorizzati qui

int total_order;            // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic

ed ecco come appare

void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
 

Credo di aver capito.

static int aaa = OrdersHistoryTotal()+ OrdersTotal()

se (la tua condizione && aaa < OrdersHistoryTotal()+ OrdersTotal() )

{

operatori

aaa=OrdersHistoryTotal()+ OrdersTotal()

}

Se è così, è ancora meglio metterlo in una funzione con i maghi in mente. Può dirci a cosa sta lavorando? La logica è un po' strana se ho capito bene, quando si apre un altro ordine, non è più facile aprire ordini non più grandi di OpenPosition?

La tua funzione restituisce il numero totale di ordini aperti e di ordini pendenti piazzati. Quanti ordini OP_BUY, se c'è OP_BUYLIMIT OP_SELLLIMIT OP_SELL ecc. non si vede.

 
ivandurak:

L'ho capito, ora il problema con la funzione if è che non so quale sia il problema.

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }          
  

il punto è che il primo valore viene eseguito.

Questo non funziona se (HaveBuyLimitOrderEnd== true)
{ModifyBuyStopOrder(PRAskS); // Seleziona
} }

in parole povere, se c'è un ordine HaveBuyLimitOrderEnd, modificarlo con un cambiamento di prezzo PRAskS

Non riesco a capire cosa c'è di sbagliato. Il valore di HaveBuyLimitOrderEnd è preso da void Myorders() nel codice sopra

il valore if(bt==1&&bl==7) è principale, quindi se è vero, usate tutti i seguenti


molto probabilmente haveBuyLimitOrderEnd== true perché ho impostato OrderLots()==3*Lot tutto funziona solo che modifica gli ordini con 0.3 lot

 
void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
Si prega di notare che è evidenziato in rosso. Il tipo di ordini commerciali è lo stesso e le variabili nel tubo sono impostate diversamente, questo è come dovrebbe essere.
 
ivandurak:
Notate cosa è evidenziato in rosso. Il tipo di ordini commerciali è lo stesso e le variabili nel tubo sono impostate diversamente, dovrebbe essere così.

Sì, dovrebbe essere, perché ci sono diverse funzioni di apertura e non faccio una richiesta per OrderType () e richiesto il flag se è aperto, ma il problema non è piuttosto in questa funzione perché le altre richieste anche non funzionano questo ho gettato prima, e sulla stessa funzione aperto NORMALMENTE

QUINDI IL PROBLEMA È CON LA RICHIESTA NELL'OPERATORE

 

Il problema sembra essere altrove. Ma probabilmente dovreste vedere il codice.

 
Vinin:

Il problema sembra essere altrove. Ma credo di aver bisogno di vedere il codice.


Sicuramente non è altrove, tutto il resto funziona, il problema è che la richiesta (HaveBuyLimitOrderEnd== true) è sbagliata, quindi mi sto chiedendo come altro dirgli di modificare e cancellare,

o la query stessa è sbagliata

se(bs==1&&bl==3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL);

se (HaveBuyLimitOrderEnd== true)

{ModifyBuyStopOrder(PRAskS);
} }

 
FoxUA:

Sì, dovrebbe essere, perché ci sono diverse funzioni di apertura e non faccio una richiesta per OrderType () e richiesto il flag se è aperto, ma il problema non è molto probabilmente in questa funzione perché le altre richieste anche non funzionano questo ho gettato prima, e sulla stessa funzione aperto NORMALMENTE

QUINDI IL PROBLEMA È CON LA QUERY NELL'OPERATORE

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }         


Mi chiedo se nelle funzioni segnate in rosso HaveBuyLimitOrderEnd è impostato nel tubo. Se no, è necessario chiamare Myorders() prima di if. Altrimenti non sapete cosa c'è. E per sicurezza, le bandiere (variabili)

HaveBuyOrder = false;
HaveSellOrder = false;
HaveBuyStopOrder = false;
HaveSellStopOrder = false;
HaveBuyLimitOrder = false;
HaveSellLimitOrder = false;
HaveBuyLimitOrderEnd = false;
HaveSellLimitOrderEnd = false;
deve essere definito a livello globale.

 
ivandurak:


Mi chiedo se il flag HaveBuyLimitOrderEnd è impostato in rosso nel tubo. Se no, è necessario chiamare Myorders() prima di if. Altrimenti non si sa cosa c'è. E per sicurezza, le bandiere (variabili)

HaveBuyOrder = false;
HaveSellOrder = false;
HaveBuyStopOrder = false;
HaveSellStopOrder = false;
HaveBuyLimitOrder = false;
HaveSellLimitOrder = false;
HaveBuyLimitOrderEnd = false;
HaveSellLimitOrderEnd = false;
deve essere definito globalmente.

è a livello glabale


bool HaveBuyOrder; // flag se ci sono ordini di acquisto sul mercato aperto
bool HaveSellOrder; // flag degli ordini di mercato aperti da vendere
bool HaveBuyStopOrder; // bandiera degli ordini di acquisto pendenti aperti
bool HaveSellStopOrder; // bandiera degli ordini di vendita pendenti aperti
bool HaveBuyLimitOrder; // bandiera degli ordini di acquisto pendenti aperti
bool HaveSellLimitOrder; // bandiera degli ordini di vendita pendenti aperti
bool HaveBuyLimitOrderEnd; // bandiera della presenza di ordini di acquisto pendenti aperti
bool HaveSellLimitOrderEnd; // segnala gli ordini di vendita pendenti aperti

è nella funzione di apertura dell'ordine.

ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0, CLR_NONE);
se (biglietto > 0) {
HaveBuyStopOrder = true;

se (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("funzione per piazzare un ordine BuyStop: ", OrderOpenPrice())
}
else Print("Error # ", GetLastError(), " function for placing BuyStop order",MarketInfo(Curr_symb,MODE_ASK));
return(ticket);
}

QUINDI TUTTO IL RESTO FUNZIONA