[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 591
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.
{ 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(); //----
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);// Закрываем Buyif (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);
}
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("переменная=", значение);
}
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ì.
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
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
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
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?
Una volta era così.
Ho aggiunto 30 perché ho un segno 5 ma è inutile.
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)
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("переменная=", значение); }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.
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
Ciò che è rilevante per la tua domanda è sottolineato.