[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 395

 
KostelloArtua :

Tavsiye için çok teşekkürler!!! Sorumu anladım. Piyasa emri verirken ihtiyacım olan komisyoncu, yani. koşullara göre aynı anda durma seviyelerini ayarlamak mümkün değildir. Artık siparişler durma seviyeleri olmadan veriliyor ve her siparişten hemen sonra ayarlanacak durdurma seviyeleri ayarladım. Bir sorun oluştu: siparişlerin en küçük kısmı değiştiriliyor ve çoğunluk için "Uzmanlar" bölümünde aşağıdakiler gösteriliyor:

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: açık #30906670 99.79'da 0.01 CLM1 sat tamam
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: OrderModify işlevi için geçersiz bilet
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: açık #30906787 1337.50'den 0.01 ESM1 satın alın tamam

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: OrderModify işlevi için geçersiz bilet

İşte kodun metni:

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"main",_MagicNumber,0,Kırmızı);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Puan,Ask-TakeProfit*Puan,0,Kırmızı);
dönüş(0);

}

Ve tam olarak neyin değiştirildiği, danışmanın piyasaya sürülmesinden sonra ilk açılanlar!

Doğal olarak, kodda sipariş değişikliğini yanlış ayarladım... Söyle!

res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"main",_MagicNumber,0,Kırmızı);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble ( Ask+StopLoss*Point , Digits) , NormalizeDouble( Ask-TakeProfit*Point , Digits) ,0,Red);
 
ilunga :
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"main",_MagicNumber,0,Kırmızı);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask+StopLoss*Point , Digits) , NormalizeDouble( Ask-TakeProfit*Point , Digits) ,0,Red);
İpucu için teşekkürler!!!
 
Sancho77 :
Sevgili programcılar, danışmanı geliştirmek için tavsiye istiyorum: Açık bir pozisyon var, bir süre sonra aynı yönde ikinci bir açılış sinyali var. Yalnızca ilk sipariş zaten pozitif bölgedeyse ikinci bir sinyal eklemek istiyorum. Şimdi bunu, bakiyenin boyutunu ve öz sermayeyi karşılaştırarak uyguladım (özkaynak bakiyeden daha büyükse, açık sipariş siyah renktedir), ancak aynı hesapta birkaç Uzman Danışman çalışıyorsa bu seçenek çalışmayacaktır.
Lütfen bana mevcut açık son siparişte kar / zararı belirleme kodunu söyleyin.

Bilet numarası kayıtlıysa, o zaman basitçe

 OrderSelect (ticket, SELECT_BY_TICKET);

if (OrderProfit() > )

{

           // доливаем ордер

}
 
ilunga :

Bilet numarası kayıtlıysa, o zaman basitçe


Teşekkür ederim! Son siparişin biletini nasıl kaydedeceğimi söyler misin?
 
Sancho77 :
Teşekkür ederim! Son siparişin biletini nasıl kaydedeceğimi söyler misin?

küresel bir değişken int bileti bildirmek için en basit seçenek olarak

ve OrderSend(...)'in bilet ile değiştirildiği yerde = OrderSend(...)

buna göre, her zaman son açık siparişin numarasını saklayacaktır.

veya Yalnızca "KimIV'ten Faydalı işlevler" konusuna bakın

 
ilunga :

küresel bir değişken int bileti bildirmek için en basit seçenek olarak

ve OrderSend(...)'in bilet ile değiştirildiği yerde = OrderSend(...)

buna göre, her zaman son açık siparişin numarasını saklayacaktır.

veya Yalnızca "KimIV'ten Faydalı işlevler" konusuna bakın

Yardım için teşekkürler!
 
rustein :

hatayı bulmama yardım et

teşekkürler


BuySL* Point // зачем умножать на Point ? Тоже самое для SelSL*Point
 
khorosh :

Teşekkürler,

Bilmiyorum ... İşe yarayacağını düşündüm, onsuz da olmuyor, yaptım ve işe yarıyor ....

 //-----
   double Spread = ( NormalizeDouble (Ask, Digits ) - NormalizeDouble (Bid, Digits )) / Point ;
   double BuySL = NormalizeDouble ( iCustom ( NULL , 0 , "NRTR" ,AveragePeriod, 0 , 1 ), Digits );
   double SelSL = NormalizeDouble ( iCustom ( NULL , 0 , "NRTR" ,AveragePeriod, 1 , 1 ), Digits );
//-----
   int Orders = OrdersTotal ();
   for ( int i= 0 ; i<Orders; i++)
  {
     if (!( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))) continue ;
     if (OrderSymbol() != Symbol ()) continue ;
    {
       if (OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL-Spread* Point
      && BuySL-Spread* Point > OrderStopLoss() && BuySL-Spread* Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL-Spread* Point ,OrderTakeProfit(), 0 , CLR_NONE );
      }
       if (OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL+Spread* Point
      && SelSL+Spread* Point < OrderStopLoss() && SelSL+Spread* Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL+Spread* Point ,OrderTakeProfit(), 0 , CLR_NONE );
      }
    }
  }
}

 
Roger :
PRICE_OPEN!!!! - yani bu fiyatı kullanamazsınız! Yalnızca göstergeler için çalışır. Teklif Et veya Sor'u kullanın.

Teşekkürler!!! Evet, bu durumda yüz pound.
 

Beyler, soru daha karmaşık ......

EA belirli bir kâra ulaşıldığında tüm siparişleri kapatmaya nasıl zorlanır .... Yalnızca bir semboldeki siparişleri kapatın..

örnek: EA 3 çift üzerinde çalışır, bir sembol için tüm siparişleri kapatacak miktar 100r ...

100 r'den fazla euro dolarda, siparişleri sadece euro dolarında kapatırken, diğerlerinde - 200 r..

Hesap bakiyesi () alırsanız, danışman yalnızca üç çiftin miktarı 100 ruble'den fazla olduğunda kapanır. bu benim için çalışmıyor!!!!

yardım lütfen.........

Neden: