[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 767
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
evet, kodun bir kısmı çalışıyor ve bir kısmı 4107 ve 130 hatalarından bahsediyor ve en ilginç olanı, fiyatı aynı fonksiyondan alıyor ve aynı açılış fonksiyonu üzerinde çalışıyorlar.
Böyle bir tasarımı bir yerde deneyin, bu örnek benim durumum için.
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice,0,Ask,0,0,Mg,0,Kırmızı)== -1)
Print( "Hata 1 OP_BUYSTOP "," Open=",OpenPrice," Zarar Durdur= ",Sor," Trall=",TrallBuy," StopLoss=",StopLoss) ;
günlükteki sonuca bak
İyi günler uzmanlar. Lütfen bana yardım edin, kod burada ...
//+------------------------------------------- --------------------+
//| Açık pozisyonları hesaplayın |
//+------------------------------------------- --------------------+
int CalculateCurrentOrders(dize sembolü)
{
int satın alır = 0, satar = 0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) ara;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICEA)
{
if(OrderType()==OP_BUY) satın alır++;
if(OrderType()==OP_SEL) satıyor++;
}
}
//---- iade sipariş hacmi
if(satın alır>0) iade(satın alır);
başka iade(-satış);
}
//+------------------------------------------- --------------------+
//| Optimum parti boyutunu hesaplayın |
//+------------------------------------------- --------------------+
double LotSize(){
çift lotMM;
if(PairsTraded==0){
lotMM = MathCeil(AccountFreeMargin() * Risk / 10000) / 10;
} başka {
lotMM = MathCeil(AccountFreeMargin() * Risk / 10000 /PairsTraded) / 10 ;
}
eğer (MM==doğru){
if (lotMM < 0.1) lotMM = Lot;
if (lotMM > 1.0) lotMM = MathCeil(lotMM);
if (lotMM > 100) lotMM = MaksLotlar;
}
başka lotMM = Çok;
dönüş(lotMM);
}
//+------------------------------------------- --------------------+
//| Açık sipariş koşullarını kontrol edin |
//+------------------------------------------- --------------------+
geçersiz CheckForOpen()
{
çift CCI5,CCI15,CCI30,CCIH1,CCIH4;
int gönder;
//----MultitimeFrame CCI ayarı
CCI5 = iCCI(BOŞ,PERIOD_M5,50,PRICE_CLOSE,0);
CCI15 = iCCI(BOŞ,PERIOD_M15,50,PRICE_CLOSE,0);
CCI30 = iCCI(BOŞ,PERIOD_M30,50,PRICE_CLOSE,0);
CCIH1 = iCCI(BOŞ,PERIOD_H1,50,PRICE_CLOSE,0);
//----
//---- satış koşulları
if ((CCIH1<0)&&(CCI30<0)&&(CCI15<0)&&(CCI5<0))//op satış
{
send=OrderSend(Symbol(),OP_SELL,LotSize(),Bid,3,Bid+StopLoss*Puan,Teklif Al-Kar*Puan,MagicName+"-Sat",MAGICEA,0,Red);
dönüş;
}
//---- satın alma koşulları
if ((CCIH1>0)&&(CCI30>0)&&(CCI15>0)&&(CCI5>0))//op satın
{
send=SiparişGönder(Symbol(),OP_BUY,LotSize(),Ask,3,Ask-StopLoss*Puan,Sor+TakeProfit*Puan,MagicName+"-Satın Al",MAGICEA,0,Mavi);
dönüş;
}
}
//----
//+------------------------------------------- --------------------+
//| Yakın sipariş koşullarını kontrol edin |
//+------------------------------------------- --------------------+
geçersiz CheckForClose()
{
//----
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) ara;
if(OrderMagicNumber()!=MAGICEA || OrderSymbol()!=Symbol()) devam ediyor;
//---- sipariş tipini kontrol et
if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-TrailingStop*Point > OrderStopLoss()){
if (Teklif > OrderOpenPrice()+TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,0,0,Beyaz);
}
} başka {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-1*Point,0,0,Beyaz);
}
if (OrderSymbol()==Symbol() && OrderType()==OP_SELL && Ask-TrailingStop*Point < OrderStopLoss()){
if (Sorun < OrderOpenPrice()-TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,0,0,Beyaz);
}
} başka {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+1*Point,0,0,Beyaz);
}
}
//----
}
//+------------------------------------------- --------------------+
//| başlatma işlevi |
//+------------------------------------------- --------------------+
geçersiz başlangıç()
{
//---- geçmişi ve ticareti kontrol et
if(Bars<100 || IsTradeAllowed()==yanlış) dönüş;
//---- açık siparişleri mevcut sembole göre hesapla
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
başka CheckForClose();
//----
}
//+------------------------------------------- --------------------+
Neyi yanlış yaptığımı anlamıyorum, oluşan koşulda sadece bir anlaşma açmasına ihtiyacım var ve bir sonraki koşula kadar kapattıktan sonra daha fazla açmıyor. for w???
İyi günler uzmanlar. Lütfen bana yardım edin, kod burada ...
... kod ...Neyi yanlış yaptığımı anlamıyorum, oluşan koşulda sadece bir anlaşma açmasına ihtiyacım var ve bir sonraki koşula kadar kapattıktan sonra daha fazla açmıyor. for w???
Sizde var ve açılma şartı olduğu sürece açacaksınız.
Bu sinyalde zaten bir pozisyonun açıldığını kontrol edin, örneğin bool OpnPose = false; Bu sinyalde pozisyon açmadan önce bayrağı kontrol edin ve henüz kurulmamışsa (OpnPose == false) bir pozisyon açın. Açıldığında, gerçekten açıldıysa ve piyasadaysa, bu sinyal için açılış bayrağını ayarlayın: OpnPose = true; Yeni bir sinyal gelir gelmez bunu sıfırlayın:
OpenPose=yanlış;
Teşekkür ederim
evet, daha kolay yapabilirsiniz, sinyal tetiklendikten sonra, 2-3 mum için başka hiçbir şey açılmaması için bir sayaç koyun, böylece manuel olarak kapanırsa başka hiçbir şey açılmaz ve birkaç mumdan sonra sayaç iptal eder açma yasağı
Ve yasak kalktıktan sonra, danışman tekrar piyasaya emirler girecek... Ya 10, 15, 20 mumdan sonra pozisyonu kapatıp tekrar açmamaya karar verirse, sinyal hala orada olsa bile? Cuma mesela...
soru, yeni bir sipariş ortaya çıktığında bunun nasıl yapılacağıdır, örnekten, eğer kapalı bir sipariş ortaya çıkarsa tam tersi "if(TotalHistoryOrders<OrdersHistoryTotal())// tarihte 1 sipariş daha belirdi" ve Açık olanın da belirlenmesine ihtiyacım var
soru, yeni bir sipariş ortaya çıktığında bunun nasıl yapılacağıdır, örnekten, eğer kapalı bir sipariş ortaya çıkarsa tam tersi "if(TotalHistoryOrders<OrdersHistoryTotal())// tarihte 1 sipariş daha belirdi" ve Açık olanın da belirlenmesine ihtiyacım var
tüm siparişleri sıralarken ve fazla olanları elerken, sayıyı saymaya devam edin, bu sayıyı hatırlayın, eğer sayı yeni döngü ile değiştiyse, o zaman ya yenisi geldi ya da açık olan kayboldu..
Sadece işlevi çağırmam gerekiyor ve bu kadar, sadece bir satıra ihtiyacım var "eğer birden fazla sipariş varsa .... o zaman" ve hepsi bu ve bana burada tam bir işlev sunuyorsunuz
sipariş verilerini bu şekilde saklıyorum