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

 
vik-777:

Aiutami a risolvere un problema

Assaggio tutti gli articoli chiusi

for (int i=0; i<OrdersHistoryTotal(); i++)// Per tutti gli ordini
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

poi filtrare per numero magico

se (OrderMagicNumber()==12)

il filtro soddisfa 3 posizioni, ma ho bisogno solo dell'ultima chiusa

non riesce a capire come lasciare solo l'ultimo?

Grazie

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
Ciò che è rilevante per la tua domanda è sottolineato.
 

Di nuovo, molto necessario.

Aiutami a risolvere il problema.

Sto selezionando per tutte le posizioni chiuse

for (int i=0; i<OrdersHistoryTotal(); i++)// su tutti gli ordini del terminale
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

dopo filtrare per numero magico

se (OrderMagicNumber()==12)

il filtro corrisponde a 3 posizioni ma ho bisogno solo dell'ultima chiusa

Non riesci a capire come lasciare solo l'ultimo?

Grazie

 
- È bello essere stupidi! Tumtz-tumtz (testo di una canzone)
 

Per favore, aiutatemi! Ho bisogno che apra l'ordine immediatamente dopo aver chiuso quello vecchio, al prezzo Tp o SL.

#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"
#proprietà show_confirm
extern int MaxRisk=3;
extern bool Buy=false; //per aprire un ordine Buy
extern bool Sell=true; //per aprire un ordine di vendita.
extern inttern MagicNumber=7749;
extern TP=210;
extern inttern SL=420;

{
double point=MarketInfo(Symbol(),MODE_POINT);//richiede un punto
double Free=AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step;
int pos,total=OrdersTotal();
//----

if(Buy==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point, "777"+ Symbol(), MagicNumber, 0, DarkGreen);

Compra=falso;
}
if(Sell==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point, "4949"+ Symbol(), MagicNumber, 0, DarkGreen);

Vendere=falso;
}

per (pos=0; pos<totale; pos++)
se(OrderSelect(pos,SELECT_BY_POS )==true)

se(OrdiniTotali()==OP_BUY)
se(PRICE_CLOSE==OrderTakeProfit()) Buy=true;
if(PRICE_CLOSE==OrderStopLoss()) Vendere=vero;

}
}

se(OrderSelect(pos,SELECT_BY_POS )==true)
se (OrdiniTotali()==OP_SELL)
{
se(PREZZO_CLOSE==OrdineStopLoss()) Buy=true;
if(PRICE_CLOSE==OrderTakeProfit()) Vendere=vero;

}
} }

//----
ritorno(0);
}
//+------------------------------------------------------------------+




 

Ragazzi, ecco una domanda, un EA cerca di aprire un ordine, ma il prezzo cambia e visualizza un errore di prezzo sbagliato, come posso bypassarlo, in modo che cerchi di comprare fino a quando non compra?

void CLOSEORDER(string ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),Bid,30,CLR_NONE);// Закрываем Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),Ask,30,CLR_NONE);// Закрываем Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,20,SL,TP,"", 1,3);
   if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,20,SL,TP,"",-1,3);
   if (error==-1) //неудачная покупка OK
   {  
      ShowERROR(error,0,0);
   }

Una volta era così.

Bid,3,CLR_NONE

Ho aggiunto 30 perché ho un segno 5 ma è inutile.

 
vik-777:

Di nuovo, molto necessario.

Aiutami a risolvere il problema.

Sto assaggiando tutti gli articoli chiusi.



Inizia dalla fine, poi il primo corrispondente è quello giusto.

for (int i=OrdersHistoryTotal()-1;i>=0; i--)//
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)


 
Craft:

C'è ancora un altro fastidio, ci sono sezioni in cui c'è solo una chiusura di una posizione e non un'inversione, anche se le condizioni per uno stop e l'apertura di una nuova posizione sono le stesse.


Queste situazioni possono verificarsi perché le condizioni di acquisto e di vendita nell'Expert Advisor non si escludono a vicenda. Provate a rintracciare i valori delle variabili richieste nel tester secondo

if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
   Print("переменная=", значение);
}
 
Pyxlik2009:

Ragazzi, ecco una domanda, un EA cerca di aprire un ordine, ma il prezzo cambia e visualizza un errore di prezzo sbagliato, come posso bypassarlo, in modo che cerchi di comprare fino a quando non compra?

Una volta era così.

Ho aggiunto 30 perché ho un segno 5 ma è inutile.

Fare un ordine while(true), controllare 135 errori e poi RefreshRates(). Guarda, ci sono script con esempi nel pacchetto con il terminale, tutto è spiegato lì.
 
alsu:

questo deve essere indagato in dettaglio, tali situazioni possono sorgere perché le condizioni di apertura di acquisto e vendita nell'EA non si escludono a vicenda. Provate a rintracciare i valori delle variabili richieste nel tester lungo le linee di

OK, in quale parte del codice dovrebbe essere inserito, come praticamente applicato?
 
SergNF:

Ciò che è rilevante per la tua domanda è sottolineato.
quindi seleziono l'ultimo ordine chiuso e ho bisogno dell'ultimo chiuso con il mago, per esempio sono le linee 3,6 e 9 quindi ho bisogno della linea 3 perché è l'ultima chiusa con il mago
Motivazione: