Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 801

 

anlamıyorum sorun ne?

int start() 

{

bool i;

int ticket;

double Pricem;

datetime Timen; 

string Symb=Symbol();

ticket=OrderSend(Symb,OP_SELL,0.1,Bid,3,Ask+4*Point,Ask-12*Point);

i=OrderSelect(0,SELECT_BY_POS);

while(true)

{

RefreshRates();

Timen=OrderCloseTime();

  if(Timen>0)

   {

     Pricem=OrderClosePrice();

     Alert(Pricem);

     Alert("ордер закрылся");

     Sleep(30000);

 }

 Sleep(10);

 }

return;                              

}


Bir kapanış mesajı görünmelidir. Emir açılır, durur, kapanır ve bu kadar! Hata nerede?
 

MQL4 kullanarak tüm açık çizelgeleri kapatma sorununu çözüyorum. Farklı döviz çiftlerine ve aşağıdaki kod koduna sahip 3 açık grafik vardır:

   for ( int i= 1 ;i<= 3 ;i++) {
       long current= ChartID ();
       Print ( "итерация цикла: " ,i, ", идентификатор текущего графика " ,current);
       bool result= ChartClose (current);
       if (result) Print ( "окно успешно закрыто" );
       else Print ( "не удалось закрыть окно с идентификатором: " , current);
   }

Komut dosyası çalıştırıldığında, üç çizelgeden yalnızca biri kapanır ve işte günlükten alınan çıktılar:

AUDUSD,H1: итерация цикла: 1 , идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 2 , идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 3 , идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто

Yani, bir çizelge kapatıldığında, mevcut olan bir başkası gibi görünmelidir, ancak:

1. İlk çizelgeyi kapattıktan sonra, ChartID işlevi, mevcut tablonun yerine kapalı grafiğin kimliğini döndürür.

2. ChartClose() işlevi 2. ve 3. yinelemelerde true değerini döndürür, yani zaten kapalı olan pencereyi başarıyla kapatır...

Birisi bana hatanın nerede olduğunu ve bu sorunun nasıl çözüleceğini söyleyebilir mi?

 
CJIeCaPb :

anlamıyorum sorun ne?

Bir kapanış mesajı görünmelidir. Emir açılır, durur, kapanır ve bu kadar! Hata nerede?

OrderSelect() öğesinin while döngüsü içinde olması gerektiğine inanıyorum ve ayrıca konum numarası yanlış olacaktır, çünkü kapattıktan sonra farklı olacaktır - bu durumda biletle seçim yapmak daha iyidir
 
tuner :
OrderSelect() öğesinin while döngüsü içinde olması gerektiğine inanıyorum ve ayrıca konum numarası yanlış olacaktır, çünkü kapattıktan sonra farklı olacaktır - bu durumda biletle seçim yapmak daha iyidir
vay, işe yaradı! Teşekkür
 
tuner :

MQL4 kullanarak tüm açık çizelgeleri kapatma sorununu çözüyorum. Farklı döviz çiftlerine ve aşağıdaki kod koduna sahip 3 açık grafik vardır:

Komut dosyası çalıştırıldığında, üç çizelgeden yalnızca biri kapanır ve işte günlükten alınan çıktılar:

Yani, bir çizelge kapatıldığında, mevcut olan bir başkası gibi görünmelidir, ancak:

1. İlk çizelgeyi kapattıktan sonra, ChartID işlevi, mevcut tablonun yerine kapalı grafiğin kimliğini döndürür.

2. ChartClose() işlevi 2. ve 3. yinelemelerde true değerini döndürür, yani zaten kapalı olan pencereyi başarıyla kapatır...

Birisi bana hatanın nerede olduğunu ve bu sorunun nasıl çözüleceğini söyleyebilir mi?

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   long currChart,prevChart= ChartFirst ();
   int i= 0 ,limit= 100 ;
   while (i<limit)
     {
      currChart= ChartNext (prevChart);
       if (currChart< 0 ) break ;  
      prevChart=currChart;
       ChartClose (currChart);
      i++;
     }
     ChartClose ( ChartFirst ());
  }
//+------------------------------------------------------------------+
 

pako , bazen çalışıyor, bazen çalışmıyor, nedenini anlamıyorum... hata veriyor:

2014.12.11 17:52:12.456 'C:\..................ex4' içinde 0x09295000 olarak okunan erişim ihlali

Belki de senaryonun atıldığı tabloyu kapatmaya çalıştığı için?

Komut dosyasını soldaki ilk çizelgeye koyarsanız PS düzgün çalışır. Ve eğer başka bir şey varsa, o zaman bir hata oluşur

 
tuner :

pako , bazen çalışıyor, bazen çalışmıyor, nedenini anlamıyorum... hata veriyor:

2014.12.11 17:52:12.456 'C:\..................ex4' içinde 0x09295000 olarak okunan erişim ihlali

Belki de senaryonun atıldığı tabloyu kapatmaya çalıştığı için?

Komut dosyasını soldaki ilk çizelgeye koyarsanız PS düzgün çalışır. Ve eğer diğerinde ise, o zaman bir hata oluşur

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   long currChart,prevChart= ChartFirst ();
   int i= 0 ,limit= 100 ;
   while (i<limit)
     {
      currChart= ChartNext (prevChart);
       if (currChart< 0 ) break ; 
       ChartClose (currChart); 
      prevChart=currChart;
      i++;
     }
     ChartClose ( ChartFirst ());
  }
//+------------------------------------------------------------------+
 

beyler çözmeme yardım edin

sorun şu ki, bir emri kayıpsız olarak aktarma işlevi, onu en çift olarak ayarlarsam ve tüm açık emirlerin kayıpsız olarak aktarılmasına izin verirsem düzgün çalışmaya başlamaz

yenileri çeviriyor her şey yolunda, ancak beş karakterde sadece sıfıra çeviriyor, ancak +1 puan olması gerekiyor, ancak en ilginç şey, hemen beş karaktere ayarlarsam, o zaman iyi çalışıyor

ve yeni ve beş karakter ile ve tüm emirleri normal olarak çevirir.Böyle bir çalışmanın nedeni nedir, yürütmenin doğru olması ve uzmanın çalışması hangi pencereye attığıma bağlı olmaması için bu işlevlerde nelere dikkat edilmelidir üç veya beş karakter

Çok teşekkürler .

    }

 //==================================================================================================

 // функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам

 //==================================================================================================

 if(_Simbol==false)//если false то по всем ордерам открытым 

 { 

   for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров

     {

       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие

         {

           if(OrderType()==OP_BUY) //если тип бай

            {

             double  bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента

             double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

             

               if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия

                {

                  if(bid-Dist_Perivoda*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия

                   {//модифицируем стоп лос

 bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

              if(!ord_modifik)//если не получилось

              Comment(GetLastError());//номер ошибки в угол

                   }

                   

                }

            }

            if(OrderType()==OP_SELL)//если тип селл

            {

              double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента

              double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

              

              if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю

              {

                if(ask+Dist_Perivoda*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия

                  {//модифицируем стоп лос

  bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

                  if(!ord_modifik)//если не получилось

                  Comment(GetLastError());//номер ошибки в  угол

                  }

                }

             } 

          }

       }

    }

  

 
pako :

Kod için teşekkür ederim, genel olarak özü açıktır, ancak bazen hala hata veriyor.

Grafik kimliklerini gösteren işlevlerle denendi. Belgelerden ChartFirst() nedir tamamen anlaşılmaz, herhangi bir şekilde yorumlayabilirsiniz - bu, soldan sırayla ilk tablo veya tüm açık olanların ilk açılışı (zamana göre) veya hatta ilki anlamına gelir. terminalde bir tanesi açıldı (şimdi açık olma olasılığı pratikte sıfırdır, bu nedenle kapatmanın bir anlamı yoktur). En son sürüme daha yatkınım, tk. Bu işlevin şu anda açık olan grafiğin kimliğini döndürdüğünü hiç görmedim.

 
tuner :

Kod için teşekkür ederim, genel olarak özü açıktır, ancak bazen hala hata veriyor.

Grafik kimliklerini gösteren işlevlerle denendi. Belgelerden ChartFirst() nedir tamamen anlaşılmaz, herhangi bir şekilde yorumlayabilirsiniz - bu, soldan sırayla ilk tablo veya tüm açıkların ilk açıklığı (zamana göre) veya hatta ilk açık anlamına gelir. terminalde açıldı (şimdi açık olma olasılığı pratikte sıfırdır, bu nedenle kapatmanın bir anlamı yoktur). En son sürüme daha yatkınım, tk. Bu işlevin şu anda açık olan grafiğin kimliğini döndürdüğünü hiç görmedim.

Grafikİlk

İstemci terminalinin ilk grafiğinin tanımlayıcısını döndürür.

Bunun en soldaki grafik olduğunu anlıyorum