Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Merhaba kodlayıcılar,
Bir Uzmanın kazanan bir ticaretten sonra durması için bazı ekstra kodlama satırları nasıl kodlanır?
Pipler çantada, sonra Expert'i durdurun...
Çok teşekkürler
Tomcat98Biraz kodlama deneyiminiz varsa aşağıya bakın. Yoksa bir kodlayıcı alın.
1) Her işlem kapanışından sonra, işlemleri kontrol etmek için OrdersHistoryTotal() içinde bir döngü yapın.
2) son işlem kapanışını kontrol edin ( OrderCloseTime() ).
3) son işlem ise, OrderProfit() == kar'ı kontrol edin.
Kâr == doğru ise, EndDayTrade == true && LastTradeDay == DayofYear() değerini ayarlayın.
Kâr == false ise, EndDayTrade == false olarak ayarlayın.
4) Program start() üzerinden geçtiğinde, herhangi bir yeni ticarete başlamadan önce EndDayTrade == false ise ==> eklemeniz gerekecektir. Doğru olduğu için yeni işlemleri tetiklemeyecektir.
5) yeni günü kontrol etmek için bir zamanlayıcı işlevine ihtiyacınız olacak. (yeni işlemleri tetiklemek istediğiniz şeyin yeni gün olduğunu varsayarsak)
en basit form if (LastDay != DayofYear() ) olacaktır.
6) yukarıdaki zamanlayıcı işlevi içinde, LastDay = DayofYear()'ı ayarlayın.
if ( LastTradeDay != DayofYear() && EndDayTrade == true)
baştan başlayan EndDayTrade == false olarak ayarlayın.
kullanıcı tanımlı değişkenler
bool EndDayTrade = yanlış;
int LastTradeDay = 9999999;
int Son Gün = 999999;
umarım bu açıklama yeterince açıktır.
Merhaba,
Bu iki kodu birleştirmeye çalışıyorum ama bununla ilgili bir sorunum var.
Bekleyen bir emir dolduğunda diğerinin iptal edilmesi gerektiğine ihtiyacım var.
ilgisizliğiniz için teşekkür ederim
int pending =0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() !=Symbol()) continue;
if(OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
opened++;
else pending++;
}
if (opened>0 && pending>0)
{
for(i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() !=Symbol()) continue;
if(OrderMagicNumber()!=Magic) continue;
if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)
OrderDelete(OrderTicket());
}
} [/PHP]
[PHP] extern int Magic = 68415;
extern int Orario_Inizio = 0;
extern int Orario_Fine = 6;
extern int Buffer = 0;
extern double Lotti = 0.1;
extern int TakeProfit = 10;
extern int StopLoss = 50;
double Massimo;
double Minimo;
int BarCount;
int BarStart;
int BarShift;
double MinLot;
double LotSize;
int i;
int ticket;
string Status;
string BuyStatus1;
string SellStatus1;
double Range;
string CommentoRange;
double pipMultiplier = 1;
int init()
{
}
int start()
{
if (Digits==3 || Digits==5)
{pipMultiplier = 10;}
else {pipMultiplier = 1; }
double TakeProfit1 = TakeProfit*Point*pipMultiplier;
double StopLoss1 = StopLoss*Point*pipMultiplier;
double Buffer1 = Buffer*Point*pipMultiplier;
double StopLossPrice = NormalizeDouble(StopLoss1,Digits);
double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);
double BufferPrice = NormalizeDouble(Buffer1,Digits);
//CALCOLA LE BARRE DEL RANGE
if(Orario_Inizio>Orario_Fine)
{
BarCount=24+Orario_Fine-Orario_Inizio;
}
if(Orario_Inizio<Orario_Fine)
{
BarCount=Orario_Fine-Orario_Inizio;
}
//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE
if(Hour()>=Orario_Fine)
{
BarStart=Hour()-Orario_Fine;
BarShift=BarStart+BarCount;
Minimo=iLow(NULL,PERIOD_H1,BarStart);
Massimo=0;
for(i=BarStart;i<=BarShift;i++)
{
Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));
Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));
Range=(Massimo-Minimo)/Point;
}
}
else
{
Massimo=0;
Minimo=0;
return(0);
}
//CONTROLLA SE E' L'ORARIO PER POTER TRADARE
if(Hour()==Orario_Fine && OrdersTotal()<2)
{
//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY
double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);
//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL
double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);
if (ticket != -1)
return(0);
}
}Birisi yardım edebilir mi?
dasio
Bu kodun tamamını start() prosedürünün başlangıcına yerleştirmeyi deneyin. Bekleyen emirleri açarken muhtemelen biraz daha filtrelemeniz gerekecek, ancak bu kodu başlangıca yerleştirirseniz, daha önce açılmış bekleyen emirlerden herhangi biri "normal" bir emir olursa, bekleyen emirleri temizleyecektir.
Birisi yardım edebilir mi?
Merhaba,
Bu başlıktan çok şey öğreniyorum, bu yüzden soru sormaya devam ediyorum.
Şimdi. Tek başıma yapmaya çalışıyorum ama başarılı olamıyorum.
Bu göstergeyi çevrimdışı bir renko grafiğinde kullanmak istiyorum.
Amacım mumun üstüne veya altına arsa yapmak ne kadar uzun inşaat yaptı.
Bu yüzden mumun özelliklerinde açıldığı zaman olduğunu biliyorum. Bu yüzden, mevcut mumun zamanını önceki mumun mumundan çıkarırsam, ihtiyacım olan şeye sahibim.
Peki nasıl kodlayabilirim?
Çok teşekkürler
Bu Kodun Neden Kapalı Emirleri Değiştirmeye Çalıştığını Anlayamıyorum
OrderCloseTime()'ı, ordermodify işlev hatası için bu geçersiz bilete bir son vereceğini düşünen if ifadelerine ekledim, ancak arada bir EA'm tüm siparişlerin kontrolünü kaybedecek ve bir şekilde kapalı bir ticarete karışacak ve sürekli olarak değiştirmeye çalışacak tekrar tekrar büyük günlük dosyaları oluşturuyor ve MT4'ü yeniden başlatmadıkça ticarete devam etmeyecek. Kapalı bir siparişi nasıl aldığından tam olarak emin değilim, belki de tüm siparişleri değiştirme sürecindeyken biri o kadar kısa sürede kapatıyor ve atıyor? Dediğim gibi bu, günde 30-50 işlemden belki iki kez olacak.
Buna nasıl bir son verileceği hakkında bir fikri olan var mı?
if (flag_s3 == TRUE) {
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {
OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
//===
while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))
{Sleep(1000);RefreshRates();}
//===
NewOrdersPlaced_s3 = FALSE;
}
}Sinyal Sorunları
mladen
Çok teşekkür ederim kod şimdi çalışıyor.Uyarı artık kendini tekrar etmiyor.Lütfen yüzlerce alıcı gibi birden fazla alıcıya alım satım uyarıları gönderecek bir komut dosyası barındırmak istiyorum, bunu nasıl yapabilirim...Şirket var mı? bu, sizin veya bu forumdaki herhangi birinin bildiği şeyleri halledebilir.
Mladen Teşekkürler, yakından baktım....Hala kodu deniyorum. Bittiğinde size haber vereceğim.
...
2 düşünce:
1. Gönderecekseniz, bence tek makul yol e-posta göndermektir ve bu durumda neden vahşi doğada bulunan e-posta spam programlarından birini kullanmıyorsunuz?
2. Sinyal göndermenin çok fazla sorunu var (bu benim görüşüm, göndermeyle ilgili sorunların bazıları pratik olarak çözülemez). Öyleyse neden mantığı tersine çevirmiyorsunuz: göndermek yerine, belirli bir konumdan okunacak (kullanıcı adı, şifre vb. ile ...) bir kod yapın ve bu şekilde göndermenin yapabileceği hemen hemen tüm sorunları yaşarsınız. çözülmedi, çözüldü (aynı anda birden fazla IP'den kullanımın önlenmesi dahil)
Yani, sadece bazı düşünceler ...
mladen Çok teşekkür ederim kod şimdi çalışıyor.Uyarı artık kendini tekrar etmiyor.Lütfen yüzlerce alıcı gibi birden fazla alıcıya alım satım uyarıları gönderecek bir komut dosyası barındırmak istiyorum, bunu nasıl yapabilirim...Var mı? sizin veya bu forumdaki herhangi birinin bildiği şeyleri halledebilecek şirketler.
Bunun gibi bir şey deneyin:
#define PAUSE_BEFORE_RETRY 1000
#define NumberOfReTries 3
if (NewOrdersPlaced_s3 && flag_s3 == TRUE)
{
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--)
{
if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != MagicNumber_3) continue;
for (int retry=0; retry<NumberOfReTries; retry++)
{
OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
int error = GetLastError();
switch (error)
{
case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
Sleep(PAUSE_BEFORE_RETRY);
continue;
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
continue;
default:
retry=NumberOfReTries;
}
}
NewOrdersPlaced_s3 = FALSE;
}
}OrderCloseTime()'ı, ordermodify işlev hatası için bu geçersiz bilete bir son vereceğini düşünen if ifadelerine ekledim, ancak arada bir EA'm tüm siparişlerin kontrolünü kaybedecek ve bir şekilde kapalı bir ticarete karışacak ve sürekli olarak değiştirmeye çalışacak tekrar tekrar büyük günlük dosyaları oluşturuyor ve MT4'ü yeniden başlatmadıkça ticarete devam etmeyecek. Kapalı bir siparişi nasıl aldığından tam olarak emin değilim, belki de tüm siparişleri değiştirme sürecindeyken biri o kadar kısa sürede kapatıyor ve atıyor? Dediğim gibi bu, günde 30-50 işlemden belki iki kez olacak.
Buna nasıl bir son verileceği hakkında bir fikri olan var mı?
if (flag_s3 == TRUE) {
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {
OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
//===
while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))
{Sleep(1000);RefreshRates();}
//===
NewOrdersPlaced_s3 = FALSE;
}
}Uyarı Çözümleri
Sanırım bu konuda daha fazla açıklamaya ihtiyacım var, bana uyarıyı tüm müşterilerime aynı anda göndermeme yardımcı olacak bir kodu nasıl yazıp kuracağım konusunda bana ipucu verebilir misiniz? E-posta adreslerini veritabanında saklayarak mı? ....ama sunucu dili, örneğin, php betiği, mt4 platformundan gelen uyarıları otomatik olarak nasıl toplayacak?......Sanırım sorun bu, eğer bir yol varsa, gönderilebilir. birden fazla cep telefonu veya e-posta adresi. Tavsiyeniz lütfen?
2 düşünce:
1. Gönderecekseniz, bence tek makul yol e-posta göndermektir ve bu durumda neden vahşi doğada bulunan e-posta spam programlarından birini kullanmıyorsunuz?
2. Sinyal göndermenin çok fazla sorunu var (bu benim görüşüm, göndermeyle ilgili sorunların bazıları pratik olarak çözülemez). Öyleyse neden mantığı tersine çevirmiyorsunuz: göndermek yerine, belirli bir konumdan okunacak (kullanıcı adı, şifre vb. ile ...) bir kod yapın ve bu şekilde göndermenin yapabileceği hemen hemen tüm sorunları yaşarsınız. çözülmedi, çözüldü (aynı anda birden fazla IP'den kullanımın önlenmesi dahil)
Yani, sadece bazı düşünceler ...ana para
Googling "toplu e-postalar göndermeyi" deneyin ve bunun için bir cevap bulacağınızı düşünüyorum.
"Uyarıları toplama" itibariyle: onu, sinyalleri dağıtacak veya bu sinyale erişime izin verecek, seçtiğiniz bir yazılım tarafından tanınacak, okunabilir bir formata " dışa aktaracak" bir şeye sahip olmanız gerekir.
Not: sinyalizasyon hizmetleri ilk bakışta göründüğünden çok daha karmaşıktır ve bir tane yapmayı planlıyorsanız, birinin gerektiği gibi çalışması için önemli maliyetlere güvenebilirsiniz.
Sanırım bu konuda daha fazla açıklamaya ihtiyacım var, bana uyarıyı tüm müşterilerime aynı anda göndermeme yardımcı olacak bir kodu nasıl yazıp kuracağım konusunda bana ipucu verebilir misiniz? E-posta adreslerini veritabanında saklayarak mı? ....ama sunucu dili, örneğin, php betiği, mt4 platformundan gelen uyarıları otomatik olarak nasıl toplayacak?......Sanırım sorun bu, eğer bir yol varsa, gönderilebilir. birden fazla cep telefonu veya e-posta adresi. Tavsiyeniz lütfen?