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

 

Her şey doğru!!!! Gerekli emir yoksa, gerekli sihirli sayı X sıfıra eşit kalır ve daha sonra açılırlar. Evet ise, X, 2 veya daha fazla açılmayan siparişe eşittir.

Anlaşma nedir?

- ilk anda, OrderSelect işlevini kullanarak mevcut olmayan bir sipariş seçersiniz.

ilk döngüde for(int Uy=OrdersTotal();Uy<=-1;Uy--) Peki, peki, döngü daha çok umut için çalışıyor, sonra onu 0 olarak değiştirdim, işte hiçbir değişiklik yok, bunlar hata değil, değişmezler, üzgünüm.

 
Döngünün çalışmasını izlemek için bir uyarı ekledim. Hiçbir şey anlamıyorum. Döngüdeki değişken bir kez, başlangıçta 0 değeri ile yazılır ve bu kadar, o zaman akım sat stop 0 ve al stop 130 olur ki bu da şaşırtıcı, simetrikler !!!! Ve 2,5 metre sonra, yazıt zaten 148 hatası yazıyor. (Komisyoncu birçok siparişi yasaklar)
 //+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
extern double stoploss= 0 ; extern double takeprofit= 20 ; extern int otstup= 20 ; extern datetime expiration= 0 ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett; double volume= 0.1 ; int i= 0 ,R1= 0 ,R2= 0 ,A= 1 ; double price= PRICE_OPEN ;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for ( int Uy= OrdersTotal ();Uy== 0 ;Uy--){
OrderSelect ( Uy,SELECT_BY_POS ); Alert ( "Uy" ,Uy);
if (OrderSymbol()== Symbol ()&&OrderMagicNumber( )== 1000 ||OrderMagicNumber( )== 2000 &&OrderSymbol()== Symbol ())
{X ++;}}  
if (X<= 2 ){
   tiket= OrderSend ( Symbol (), OP_BUYSTOP,  volume*A, price +otstup* Point , Point * 3 , R1, PRICE_OPEN +takeprofit* Point +otstup* Point , "OP_BUYSTOP" , 1000 ,  expiration, Red ); 
   Alert ( "OP_BUYSTOP" , GetLastError ( )); 
   tikett= OrderSend ( Symbol (), OP_SELLSTOP,  volume*A, price -otstup* Point , Point * 3 ,R2, PRICE_OPEN -takeprofit* Point -otstup* Point , "OP_SELLSTOP" , 2000 ,  expiration, C'0,128,255' );
     Alert ( "OP_SELLSTOP" , GetLastError ( )); 
    }       
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

Vay, ne saçmalık. Ve ilk olarak, hatanın tarihi her yazıldığında, yaklaşık 49 kez.Evet !!!! X her zaman 0 olarak kalır ve normal olarak yazılır. 2 sipariş aracılığıyla.

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

Her şey doğru!!!! Gerekli emir yoksa X, gerekli sihirli sayı ile sıfıra eşit kalır ve daha sonra açılırlar. Evet ise, X, 2 veya daha fazla açılmayan siparişe eşittir.

Anlaşma nedir?

- İlk anda, OrderSelect işlevini kullanarak mevcut olmayan bir sipariş seçersiniz.

ilk döngüde for(int Uy=OrdersTotal();Uy<=-1;Uy--) Peki, peki, döngü daha çok umut için çalışıyor , sonra onu 0 olarak değiştirdim, işte hiçbir değişiklik yok, bunlar hata değil, değişmezler, üzgünüm.

daha fazlasını nasıl yapabilir çalıştır?

Kaç sipariş açılırsa açılsın , sipariş sayısı sıfırdan büyük veya sıfıra eşit olduğu için Uy<=-1 koşulu hemen karşılanmaz .

 

hatayı bulmama yardım et

teşekkürler

 void TrailPositions()
{
//-----
   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* Point
      && BuySL* Point > OrderStopLoss()) // && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL* Point ,OrderTakeProfit(), 0 , CLR_NONE );
         if (UseSound == true)
        {
         PlaySound (SuccesSound);
        }
      }
       if (OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL* Point
      && SelSL* Point < OrderStopLoss()) // && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL* Point ,OrderTakeProfit(), 0 , CLR_NONE );
         if (UseSound == true)
        {
         PlaySound (SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh :


Keneler varsa, danışmanın simgesi "gülümsüyor", danışman işlem yapmalıdır (yani, bunun için koşullar ortaya çıkar), ancak bunları yapmaz, o zaman hata ayıklamanız gerekir.

Danışman kodunda, özellikle karşılaştırmanın yapıldığı yerlerde Prine() komutunu düzenleyin ve tam olarak neyi karşılaştırdığınızı görün. Belki de double türündeki değişkenler üzerinde bir eşitlik karşılaştırmanız vardır ve değişkenlerin eşit olduğunu varsayarken karşılaştırmanın sonucu her zaman yanlıştır.

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 durdurma 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!

 
öyleyse, ZZ'deki son iki ekstremumu gösteren bir işleve herkes yardımcı olabilir mi ???
 
Sevgili programcılar, Danışmanı geliştirmek için tavsiye istiyorum: Açık bir pozisyon var, bir süre sonra aynı yönde açılmak için ikinci bir sinyal alındı. 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.
 
En güvenilir olan pip cinsinden ölçün.
 
Roger :
En güvenilir olan pip cinsinden ölçün.
Bir kod önerebilir misiniz?