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

 
Vinin :

Tüm küme parantezlerine sahip olduğunuzdan emin misiniz? Yer yer yoklar. Mantık bu yüzden sakat. Ve büyük olasılıkla, sonuç beklediğiniz gibi değil.
Vit, uzakta mıydın? Seni göreli uzun zaman oldu...
 
artmedia70 :
Vit, uzakta mıydın? Seni görmemeyeli uzun zaman oldu...


Bugün evdeydim (neredeyse)
 
Vinin :

Bugün evdeydim (neredeyse)
İkinci hafta neredeyse evdeyim :)
 
Vinin :

Tüm küme parantezlerine sahip olduğunuzdan emin misiniz? Yer yer yoklar. Mantık bu yüzden sakat. Ve büyük olasılıkla, sonuç beklediğiniz gibi değil.

Gösterge kodundan bahsediyorsanız, parantez ile her şey yolunda, gösterge çalışıyor, oklar şeklinde sinyaller veriyor (al/sat-4 ve 5 gösterge tamponu). Ancak Expert Advisor'daki göstergeden bu okları okuyunca işin saçma olduğu ortaya çıkıyor. Uzman Danışmana tam olarak vermedim, çünkü asıl şey nasıl sayılacağını, sinyali saymayı ve ilgili işlemi gerçekleştirmeyi anlamaktır. Genel olarak, sorun sinyali okumakta.
 
paladin80 :

Doğru kodu buraya eklemek için önce SRC'ye tıklayın ve ardından kodu buraya kopyalayın.

Sizi belirli bir zamanda doğru anlarsam, bir OP_BUYSTOP ve bir OP_SELLSTOP açmanız gerekir? Şu anda bekleyen başka emir olması mümkün mü? Örneğin. geciktiriciler var ama yenilerini açmadan önce eskileri silmeniz mi gerekiyor?



 if (hour1 == TimeHour( TimeCurrent ()) && minute1 == TimeMinute( TimeCurrent ())) // если время подошло то
{
min=Low[iLowest( Symbol (), 0 ,MODE_LOW, 6 , 1 )]; // вычисляем минимальную цену последних 6 свечей
max=High[iHighest( Symbol (), 0 ,MODE_HIGH, 6 , 1 )]; // вычисляем максимальную цену последних 6 свечей
double volum=max-min; // общий объем локалки последних 6 свечей М5

if ((volum<=n)== true ) // если объем свечей меньше или равно n пунктов 
{ 
OrderSend ( Symbol (), OP_BUYSTOP, параметры); // открываем отложенный ордер байстоп
OrderSend ( Symbol (), OP_SELLSTOP, параметры); // открываем отложенный ордер селлстоп
}

if ( OrderSelect ( 1 ,SELECT_BY_POS,MODE_HISTORY)&& OrderTakeProfit()== true ) ///если первый открывшийся отложенный ордер закрыт с профитом
{
OrderDelete( 1 ); // удаляем второй открытый отложенный ордер
}

}
bool closeorder; //определим  закрытие ордеров
closeorder= true ;

if (closeorder== true ) //
{
int hour2 = TimeHour(StrToTime(time2)); // вычисляем время закрытия ордеров
int minute2 = TimeMinute(StrToTime(time2));

if (hour2 == TimeHour( TimeCurrent ()) && minute2 == TimeMinute( TimeCurrent ())) // если время 
{
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // определяем количество открытых позиций, и отложенных ордеров и закрываем все возможные позиции, и отложенные ордера
 if ( OrderSelect ( 1 ,SELECT_BY_POS,MODE_TRADES)) break ; //определяем место где будем искать ( рабочие позиции)
if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage); // Закрытие ордера бай если такой есть
if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage); //Закрытие ордера селл если такой есть
{
for ( int D= OrdersTotal ()- 1 ; D>= 0 ; D--)
if ( OrderSelect (D,SELECT_BY_TICKET,MODE_TRADES)== true )
if (OrderType()==OP_BUYSTOP ) OrderDelete(D); //удаляем отложенный байстоп
if (OrderType()==OP_SELLSTOP) OrderDelete(D); // удаляем отложенный селлстоп

Daha anlaşılır olması için zaten ortak bir kod attım.. Günün sonunda olası tüm pozisyonları ve emirleri kapatmak istedim..

ve bekleyen iki emrin açılması sırasında (sabah), plana göre, ondan önce açık emir veya açık pozisyon yoktur, çünkü. hepsi akşamları belirli bir saatte kapatılmalıdır. Merak ediyorum, en azından doğru bir şekilde tanımlanmış siparişlerin tam kapanışına sahip miyim? =)))



 
artmedia70 :

Dürüst olmak gerekirse, işlevinin mantığını bilmiyorum. Nesneleri kaldırmalı mı yoksa inşa etmeli mi, bilmiyorum. Bana ondan ne istediğini söyle ve mantıkta aksaklığın nerede olduğunu görelim. Ancak f-tion bir grafik oluşturmaya çalıştığı için. nesne, ancak bir hata veriyor, bu yüzden zaten var. Programınızın mantığına göre sırada ne var? Farklı bir adla yeni bir nesne oluşturabilirsiniz (örneğin, nesne adlarına geçerli saati ekleyin (TimeToStr(TimeCurrent()))) veya nesne zaten varsa, ancak özelliklerini değiştirmeniz gerekiyorsa, nesneyi yeni bir şekilde oluşturun, ancak özelliklerini değiştirin. O zaman hata artık görünmeyecek.

Her şey basit. Önemli olan ne istediğini bilmek... :)



Aslında işlev, baskının görsel olarak değiştirilmesi gibidir, yalnızca ekranda her şeyi görüntüler. Henüz çok iyi yazılmamış ama işe yarıyor.. :) Alacağım, yeniden yazacağım. Ve sonra o soru hakkında düşünebilirsiniz.

Bu arada, yeni nesneler inşa etmezseniz, ancak mevcut olanların özelliklerini değiştirirseniz, o zaman tekrar ... Golovnyak olacak. Planlandığı gibi, ekranda son N -sövelerini görüntülemeniz gerekiyor. Aşırı nesneyi sürekli olarak yeniden yazarsanız, belirli bir cant (hata) ile yalnızca 1 nesne olacaktır. Daha ileri gidebilir ve döngü boyunca ihtiyaç duyduğunuz kadar nesne seçebilir ve yalnızca bunları yeniden yazabilirsiniz, ancak görünüşe göre bu çabaya değmez, çünkü işlev sadece test içindir ve yapılacak çok şey olduğu için gerçekten uğraşmak istemiyorum. Bir şekilde bu fonksiyonun kodunu düzelteceğim ve aklıma getireceğim, sonra düşünebilirsiniz!

 

Böyle bir soru var. Deneme açısından, böyle bir şey yazıyorum. Belirli sinyallere göre doğal olarak birbiri ardına açılan bir sipariş paketi toplanır. Son emir kapandığında diğer tüm piyasaları ve genel olarak bekleyen emirleri kapatmak gerekir...

Elbette her şeyi diziler aracılığıyla yazabilirsiniz ama ben her zamanki yoldan gittim. Bunun gibi:

 for ( int li_ord= OrdersTotal ()- 1 ; li_ord>= 0 ; li_ord--)
   {
       if (! OrderSelect (li_ord,SELECT_BY_POS)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
        
      g_ticket = OrderTicket();
      g_type = OrderType();

       // Закрытие всех ордеров, если последний ордер закрыт
       if (GetLastOrderState() != 0 )
      {
           if (g_type > 1 )
          {
              DeletePendingOrders(g_ticket);
          }
           else
          {
              CloseMarketOrders(g_ticket);
          }
      }
   }

Koşul:

 if (GetLastOrderState() != 0 )

son açılan siparişin kapanıp kapanmadığını kontrol eder! Ardından, bekleyen ve kapanan piyasa emirlerini kaldırmaya başlıyoruz...


İşte işlevin kendisi, bu yüzden bir şeylerin yanlış olduğuna şüphe yok (Eleştiri ve yorumlar memnuniyetle karşılanır ve hatta hoş geldinizden daha fazlası :))) ):

 //+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
double GetLastOrderState()
{
   double lastOrderCloseTime = - 1 ,                   // Время закрытия последнего ордера
          lastOrderOpenTime = - 1 ;                     // Время открытия последнего ордера
   
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
  
       if (lastOrderOpenTime < OrderOpenTime())
      {
          lastOrderOpenTime = OrderOpenTime();
          lastOrderCloseTime = OrderCloseTime();
      }
   }
   
   return (lastOrderCloseTime);
}
 
vovak_85 :

Gösterge kodundan bahsediyorsanız, parantez ile her şey yolunda, gösterge çalışıyor, oklar şeklinde sinyaller veriyor (al/sat-4 ve 5 gösterge tamponu). Ancak danışmandaki göstergeden bu okları okurken sonuç saçma. Uzman Danışmana tam olarak vermedim, çünkü asıl şey nasıl sayılacağını, sinyali saymayı ve ilgili işlemi gerçekleştirmeyi anlamaktır. Genel olarak, sorun sinyali okumakta.
Bu senin:
 double L_B= iCustom ( 0 , 0 , "Makedonskii" ,MM,MP, 0 , 4 );

double L_S= iCustom ( 0 , 0 , "Makedonskii" ,MM,MP, 0 , 5 );

Ve buna şöyle ihtiyacınız var:
 double L_B= iCustom ( NULL , 0 , "Makedonskii" ,MM,MP, 4 , 0 );

double L_S= iCustom ( NULL , 0 , "Makedonskii" ,MM,MP, 5 , 0 );
Bunun gibi bir şey.
 
hoz :

Aslında işlev, baskının görsel olarak değiştirilmesi gibidir, yalnızca ekranda her şeyi görüntüler. Henüz çok iyi yazılmamış ama işe yarıyor.. :) Alacağım, yeniden yazacağım. Ve sonra o soru hakkında düşünebilirsiniz.

Bu arada, yeni nesneler inşa etmezseniz, ancak mevcut olanların özelliklerini değiştirirseniz, o zaman tekrar ... Golovnyak olacak. Planlandığı gibi, ekranda son N -sövelerini görüntülemeniz gerekiyor. Aşırı nesneyi sürekli olarak yeniden yazarsanız, belirli bir cant (hata) ile yalnızca 1 nesne olacaktır. Daha ileri gidebilir ve döngü boyunca ihtiyaç duyduğunuz kadar nesne seçebilir ve yalnızca bunları yeniden yazabilirsiniz, ancak görünüşe göre bu çabaya değmez, çünkü işlev sadece test içindir ve yapılacak çok şey olduğu için gerçekten uğraşmak istemiyorum. Bir şekilde bu fonksiyonun kodunu düzelteceğim ve aklıma getireceğim, sonra düşünebilirsiniz!

Bir keresinde mesajları boş bir gösterge penceresinde görüntüleyen bir fonksiyon yapmıştım. Çıktı satırlarının renklerini özelleştirebilirsiniz. O zaten ayarlandı. Eğer öyleyse, paylaşabilirim.
 
r772ra :
Bu senin: Ve buna ihtiyacın var:
Bunun gibi bir şey.

düzeltme için teşekkürler ama algoritma düzgün çalışmadı...