[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 767

 
FoxUA :

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???

 
mydone :

İ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ış;

 
evet, bunu 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ğı
 

Teşekkür ederim

 
Techno :
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...
 
artmedia70 :
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...
Zaten bir mumdan sonra bile, dikkate alınması gereken tamamen farklı bir sinyal olacaktır. İlk sinyalin kesin olarak kaybolması için 3 mum beklemek yeterlidir. Bu arada, 5 15 30 ve 60 süresi olan bir hindi kullanılıyor, bu nedenle 3x 30 dakikalık mumlar veya 15 dakikalık mumlar yeterli
 

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

 
FoxUA :

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..
 
Techno :
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

 int total_order;             // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic
Neden: