for (int i=0; i<OrdersHistoryTotal(); i++)// Tüm terminal siparişleri için if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
sihirli sayıya göre filtreledikten sonra
if (OrderMagicNumber()==12)
filtre 3 konumu karşılıyor ve sadece son kapalı olana ihtiyacım var
Sadece sonuncuyu nasıl bırakacağımı anlayamıyorum?
teşekkürler
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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));
}
{ çift nokta =MarketInfo(Symbol(),MODE_POINT);//Nokta sorgusu çift Serbest=HesapFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); çift Adım =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor(Serbest*MaxRisk/100/One_Lot/Adım)*Adım; int konum,toplam=SiparişToplam(); //----
Beyler bir soru, işte bir alım sinyali, danışman emir açmaya çalışıyor ama fiyat değişiyor ve hata yanlış fiyattan çıkıyor, bunu nasıl aşabilirim, o satın alana kadar ne almaya çalışacak? ?
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 );
}
Bir sıkıntı daha kaldı, durdurma ve yeni pozisyon açma şartları eşit olmasına rağmen darbenin değil, sadece pozisyonun kapanmasının gerçekleştiği alanlar var.
bunun ayrıntılı olarak incelenmesi gerekir, bir EA'da alım satım açma koşullarının birbirini dışlamaması nedeniyle bu tür durumlar ortaya çıkabilir. Prensip gereği test cihazında gerekli değişkenlerin değerlerini takip etmeye çalışın.
if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
Print("переменная=", значение);
}
Beyler bir soru, işte bir alım sinyali, danışman emir açmaya çalışıyor ama fiyat değişiyor ve hata yanlış fiyattan çıkıyor, bunu nasıl aşabilirim, o satın alana kadar ne almaya çalışacak? ?
ayakta durmak için kullanılır
5 işaretim olduğu için 30 ekledim ama faydası yok
while(true) emrinin açılışını döngüye sokun, 135 hatasını kontrol edin, ardından RefreshRates(). Bak, terminal örneklerle betiklerle geliyor, her şey orada yazıyor.
bunun ayrıntılı olarak incelenmesi gerekir, bir EA'da alım satım açma koşullarının birbirini dışlamaması nedeniyle bu tür durumlar ortaya çıkabilir. Prensip gereği test cihazında gerekli değişkenlerin değerlerini takip etmeye çalışın.
Tamam, bu kodun hangi bölümüne eklenmeli, pratik olarak nasıl uygulanır?
bu yüzden son kapalı sıra seçildi ve sonuncunun sihirle kapatılmasına ihtiyacım var, örneğin, bunlar 3,6 ve 9 satırlar, bu nedenle 3. satıra ihtiyacım var çünkü sihirle kapatılan sonuncusu
Sorunu çözmeye yardımcı olun
Tüm kapalı pozisyonlar için bir seçim yapıyorum
for (int i=0; i<OrdersHistoryTotal(); i++)// Tüm terminal siparişleri için
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
sihirli sayıya göre filtreledikten sonra
if (OrderMagicNumber()==12)
filtre 3 konumu karşılıyor ve sadece son kapalı olana ihtiyacım var
Sadece sonuncuyu nasıl bırakacağımı anlayamıyorum?
teşekkürler
tekrar ediyorum çok gerekli
Sorunu çözmeye yardımcı olun
Tüm kapalı pozisyonlar için bir seçim yapıyorum
for (int i=0; i<OrdersHistoryTotal(); i++)// Tüm terminal siparişleri için
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
sihirli sayıya göre filtreledikten sonra
if (OrderMagicNumber()==12)
filtre 3 konumu karşılıyor ve sadece son kapalı olana ihtiyacım var
Sadece sonuncuyu nasıl bırakacağımı anlayamıyorum?
teşekkürler
Bana yardım et lütfen! Emrin eskisi kapandıktan hemen sonra Tp veya SL fiyatından açılması gerekmektedir.
#property telif hakkı "Telif hakkı © 2010, MetaQuotes Software Corp."
#özellik bağlantısı "http://www.metaquotes.net"
#özellik gösterisi_onayla
harici int MaxRisk=3;
extern bool Buy=false; // satın alma siparişi açmak için
extern bool Sat=true; // bir satış emri açmak için
harici int MagicNumber=7749;
harici int TP=210;
harici int SL=420;
{
çift nokta =MarketInfo(Symbol(),MODE_POINT);//Nokta sorgusu
çift Serbest=HesapFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
çift Adım =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Serbest*MaxRisk/100/One_Lot/Adım)*Adım;
int konum,toplam=SiparişToplam();
//----
if(Buy==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point,"777"+ Symbol(), MagicNumber, 0, DarkGreen);
satın=yanlış;
}
if(Sat==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point,"4949"+ Symbol(), MagicNumber, 0, DarkGreen);
satmak=yanlış;
}
için (konum=0; konum<toplam; konum++)
if(OrderSelect(kon,SELECT_BY_POS )==true)
if(OrdersTotal()==OP_BUY)
if(PRICE_CLOSE==OrderTakeProfit()) Buy=true;
if(PRICE_CLOSE==OrderStopLoss()) Sat=true;
}
}
if (OrderSelect(kon,SELECT_BY_POS )==true)
if (OrdersTotal()==OP_SEL)
{
if(PRICE_CLOSE==OrderStopLoss()) Buy=true;
if(PRICE_CLOSE==OrderTakeProfit()) Sat=true;
}
} }
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
Beyler bir soru, işte bir alım sinyali, danışman emir açmaya çalışıyor ama fiyat değişiyor ve hata yanlış fiyattan çıkıyor, bunu nasıl aşabilirim, o satın alana kadar ne almaya çalışacak? ?
ayakta durmak için kullanılır
5 işaretim olduğu için 30 ekledim ama faydası yok
tekrar ediyorum çok gerekli
Sorunu çözmeye yardımcı olun
Tüm kapalı pozisyonlar için bir seçim yapıyorum
Sondan başlayın, sonra uygun olan ilkidir.
for (int i=OrdersHistoryTotal()-1;i>=0; i--)//
if( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)==true)
Bir sıkıntı daha kaldı, durdurma ve yeni pozisyon açma şartları eşit olmasına rağmen darbenin değil, sadece pozisyonun kapanmasının gerçekleştiği alanlar var.
bunun ayrıntılı olarak incelenmesi gerekir, bir EA'da alım satım açma koşullarının birbirini dışlamaması nedeniyle bu tür durumlar ortaya çıkabilir. Prensip gereği test cihazında gerekli değişkenlerin değerlerini takip etmeye çalışın.
if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка { Print("переменная=", значение); }Beyler bir soru, işte bir alım sinyali, danışman emir açmaya çalışıyor ama fiyat değişiyor ve hata yanlış fiyattan çıkıyor, bunu nasıl aşabilirim, o satın alana kadar ne almaya çalışacak? ?
ayakta durmak için kullanılır
5 işaretim olduğu için 30 ekledim ama faydası yok
bunun ayrıntılı olarak incelenmesi gerekir, bir EA'da alım satım açma koşullarının birbirini dışlamaması nedeniyle bu tür durumlar ortaya çıkabilir. Prensip gereği test cihazında gerekli değişkenlerin değerlerini takip etmeye çalışın.
Sorunuzla alakalı olanın altını çizdim.