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

 
wishmast :

Beyler, kafamı çoktan kırdım. Danışman, örneğin 1/4'lük bir alımla 8 mum için yüksek ve alçak için gecikmeler nasıl ayarlanır.

Bunun gibi bir şey yapıyorum:

double Vhod1=iEn Yüksek(Symbol(),0,MODE_HIGH,8,0);

double Vhod2=iLow(Symbol(),0,MODE_LOW,8,0);

çift TP=((Vhod1-Vhod2)/4)+Vhod1;


Parametreleri değiştirmeye çalıştım ama durakların doğru olmadığını söylüyor, sonra 7.00000 fiyatına ayarlanacak, nereye gittiği belli değil.

iHighest , iLowest mumun fiyatını değil adresini verir, yardım ve ders kitabını okuyun.
 
evillive :
iHighest, iLowest fiyatı değil mumun adresini verir, yardım ve ders kitabını okuyun.

Evet efendim. Gerekli

double Vhod1=iHigh(Symbol(), 0, iHighest (Symbol(),0,MODE_HIGH,8,0));

double Vhod2=iLow(Symbol(), 0, iLowest(Symbol(),0,MODE_LOW,8,0));

 
alvlaf :


Yanlış ekledim ama yine de olması gerektiği gibi çalışmıyor çünkü ... Çünkü.)) Kısacası şöyle olmalı:

1) init'te AllowNewOrders değişkenini yaratırız (eğer yoksa)

2) OnTick kapanana kadar yeni bir sipariş oluşturun bu sembolün OnTick'i boşta, ancak başka bir sembolün OnTick'i çalışacak

3) MaxOpenOrders sınırına ulaşana kadar diğer semboller için 2. adım gerçekleştirilir

4) siparişin sonunda, kârsız veya sıfır ise, AllowNewOrders aracılığıyla tüm kopyalar için yeni sipariş açılmasını yasaklıyoruz.

[bu nedenle hemen sorun - kaybeden bir dizi sona erdiğinde, AllowNewOrders=1 ve MaxOpenOrders>1 ve bu oturumlardan birkaçı varsa?]

5) 4. madde yerine getirilmezse yeni siparişler açılabilir.

Program ZATEN MaxOpenOrders=1 ile çalışmalıdır. Kaybedilen bir emrin ardından yeni emirleri AllowNewOrders=0 olarak yasakladığımızda ve bir sonraki OrderSend herhangi bir nedenle bir emir açmadığında, belki de hala bir sorun olacaktır. Bu durumda nasıl sigortaladığımı aşağıda yazacağım...

 int OnInit ()                     
{
   if (! GlobalVariableCheck ( "AllowNewOrders" )) GlobalVariableSet ( "AllowNewOrders" , 1 );
   return ( INIT_SUCCEEDED );
}
//----------------------------------------------------------------------
void OnTick ()
{
   if (CountTrades() == 0 )   // Количество ордеров должно равняться нулю
   {
       if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
       // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet ( "AllowNewOrders" , 0 );
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble (LotsLastHistOrder()*Multiplier, 2 );
         ticket = OrderSend ( Symbol (), Type, Lot, Price, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
      }
       else GlobalVariableSet ( "AllowNewOrders" , 1 );
       if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 ) 
       // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet ( "AllowNewOrders" , 0 );
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble (LotsLastHistOrder(), 2 );
         ticket = OrderSend ( Symbol (), Type, Lot, Price, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
      }
       else GlobalVariableSet ( "AllowNewOrders" , 1 );
       if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0 )
       // Если последняя сделка прибыльная или это первая сделка, то открывается ордер
      {
         if ( OrdersTotal () >= MaxOpenOrders || GlobalVariableGet ( "AllowNewOrders" ) == 0 ) return ;
         if (SignalBuy())
         {
            ticket = OrderSend ( Symbol (), OP_BUY, Lots, Ask, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
         }
         if (SignalSell())
         {
            ticket = OrderSend ( Symbol (), OP_SELL, Lots, Bid, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
         }
      }
   }
}
 
A13ksandr :

Bu durumda nasıl sigortaladığımı aşağıda yazacağım...

 int Tries = 5 ;
ResetLastError ();
do
{
   // решение ошибок с предыдущей попытки открытия ордера, например:
   if (_Error == 134 )
   {
      _Lot = NormalizeDouble (_Lot / 2 , 2 );
       if (_Lot < SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN )) _Lot = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   }
   if (_Error == 138 ) RefreshRates();
   Ticket = OrderSend ( Symbol (), OP_BUY, _Lot, Ask, 3 , 0 , 0 , NULL , 0 , 0 , clrNONE );
   if (Ticket < 0 )
   {
      _Error = GetLastError ();
       Sleep ( 100 );
   }
   Tries--;
}
while (Ticket < 0 && Tries > 0 );

Hataların çözümünü doğru bir şekilde sağlarsanız, sipariş açmadaki başarı yüzdesi artar.

 
Merhaba! Lütfen gönderideki işlevi kullanırken bana bildirin (her siparişin kendi büyüsü vardır) - http://forum.forexpeoples.ru/showthr...=1#post1715092 , satış veya satın alma için en son siparişleri nasıl arayacağınızı, ya da bir dizi düzeni yükseltmek, her bir düzenin kendi büyüsüne sahip olmadığı, ancak her bir düzen dizisinin kendi büyüsü olduğu gibi görünecektir. Onlar. Büyüleriyle yeni bir dizi emir açıldığında, eski serilerin büyüleri ile emirlerini açmaya devam ettiği varsayılır. Her serinin kendi kârı vardır ve buna benzer birçok emir dizisi vardır.

Aşağıdaki kod bu koşullar altında nasıl değişebilir?
for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
(! OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)) devam ederse;
if(OrderSymbol()!=Symbol()) devam ediyor; if(OrderMagicNumber() < startMagicNumber || OrderMagicNumber() >= startMagicNumber + MaxTrades) devam eder;

Serinin ilk siparişlerini açarken sihirli nesil kodunu ayarladım fakat aynı seride yeni siparişler açarken sorun çıkıyor.

Sihirli nesil, kendisini gönderiden kodlar:
//+------------------------------------------- --------------------+
// keekkenen: serideki bir sonraki sihri elde edin
int getNextMagicNumber(){
int büyü = BOŞ;

if (OrdersTotal() == 0) {
dönüş(startMagicNumber);
}

for (int i = startMagicNumber; i < startMagicNumber + MaxTrades; i++){
büyü = checkMarketByMagic(i);
if (sihirli != BOŞ) break;
}

if (sihir == BOŞ){
büyü = startMagicNumber; // serideki ilk
} başka {
büyü++; // serideki sonraki
}

dönüş(sihir);
}
//+------------------------------------------- --------------------+
// keekkenen: Belirtilen sihirle piyasada bir sipariş olup olmadığını kontrol edin
int checkMarketByMagic(int büyü){
for(int i = 0; i < OrdersTotal(); i++){
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) devam;
if(OrderSymbol() != Symbol()) devam ediyor;
if(OrderMagicNumber() == büyü) dönüş(sihir);
}
dönüş(BOŞ);
}
//+------------------------------------------- ------ ----------------------+
 
İyi günler forumun beyleri,
Dalları karıştırdıysam kusura bakmayın ama KONUYU nereye yapıştıracağımı bulamadım o yüzden tekme atmayın.

Bir süre önce, kullanıcılardan mevcut yeni danışmanlar için internette gezinirken, dikkat etmediğim biriyle tanıştım, çünkü açıklamaya göre standarttı, çoğu vardı, talihsizliğime dikkat etmedim ve adı da.

Belki kullanan, gören, okuyan en azından adını söylesin, Google işini yapsın ya da varsa hediye olarak kabul edeyim. Belki benzer eylemleri gerçekleştiren benzer bir danışman vardır.

Danışmanın anlamını anlatacağım (şu anda ihtiyacım olan şey zor olan bir şey yok).

Kabaca konuşursak, bu görev şöyle görünecektir:

1. Manuel olarak bir pozisyon açtınız, örneğin satın alın.
2. Danışman ona bir zararı durdur ve ayarlara göre kar elde et.
3. Emir, kâr al ile kapatılmıştır - danışman hemen başka bir satın alma açar ve aynı zararı durdur ve kârı al'ı ayarlar, ilk zararı durdur veya son bir kâr al olana kadar.
4. Konum stop loss ile kapatılırsa, robot başka bir şey yapmaz. EA, bir sonraki siparişin manuel olarak açılmasını bekliyor.

Herşey.

Çok minnettar olacağım.
 
A13ksandr :


Yanlış ekledim ama yine de olması gerektiği gibi çalışmıyor çünkü ... Çünkü.)) Kısacası şöyle olmalı:

1) başlangıçta AllowNewOrders değişkenini yaratırız (eğer yoksa)

2) OnTick kapanana kadar yeni bir sipariş oluşturun bu sembolün OnTick'i boşta, ancak başka bir sembolün OnTick'i çalışacak

3) MaxOpenOrders sınırına ulaşana kadar diğer semboller için 2. adım gerçekleştirilir

4) siparişin sonunda, kârsız veya sıfır ise, AllowNewOrders aracılığıyla tüm kopyalar için yeni sipariş açılmasını yasaklıyoruz.

[bu nedenle hemen sorun - kaybeden bir dizi sona erdiğinde, AllowNewOrders=1 ve MaxOpenOrders>1 ve bu oturumlardan birkaçı varsa?]

5) 4. madde yerine getirilmezse yeni siparişler açılabilir.

Program ZATEN MaxOpenOrders=1 ile çalışmalıdır. Kaybedilen bir emrin ardından yeni emirleri AllowNewOrders=0 olarak yasakladığımızda ve bir sonraki OrderSend herhangi bir nedenle bir emir açmadığında, belki de hala bir sorun olacaktır. Bu durumda nasıl sigortaladığımı aşağıda yazacağım...

Teşekkürler Alexander, yarın kontrol edeceğim. [bu nedenle hemen sorun - kaybeden bir dizi sona erdiğinde, AllowNewOrders=1 ve MaxOpenOrders>1 ve bu oturumlardan birkaçı varsa?] MaxOpenOrders>1 bir değere göreyse, teorik olarak AllowNewOrders=1 de daha fazla olmalıdır aynı değere göre. Ama şimdilik bununla uğraşıp MaxOpenOrders'ı tamamen kaldıramazsınız, çünkü programın bu versiyonunda zaten birden fazla seri planlanmamıştır.
 
alvlaf :
Teşekkürler Alexander, yarın kontrol edeceğim. [bu nedenle hemen sorun - kaybeden bir dizi sona erdiğinde, AllowNewOrders=1 ve MaxOpenOrders>1 ve bu oturumlardan birkaçı varsa?] MaxOpenOrders>1 bir değere göreyse, teorik olarak AllowNewOrders=1 de daha fazla olmalıdır aynı değere göre. Ama şimdilik bununla uğraşıp MaxOpenOrders'ı tamamen kaldıramazsınız, çünkü programın bu versiyonunda zaten birden fazla seri planlanmamıştır.
Denedim, ilk beş dakika iyi çalıştı, ardından aynı anda (4) ve aynı çift için artan lot ile birkaç fırsat açmaya başladım. Alexander, senin versiyonunda global değişkenin değerini nasıl aldığı ve değiştirdiği bana tam olarak açık değil mi?
 

Herkese selam !

Grafikte böyle bir grafik nesne var.

Parametrelerinde, zaman, değer, kod. Değer, nesnenin bulunduğu fiyata karşılık gelir.

Bir şekilde zamanını ve değerini alabilir miyim (bir işlev veya başka bir şey aracılığıyla)?

\\\\\

Daha geniş soru şu şekilde sorulabilir: Bir kerede zaman ve fiyat alabileceğiniz herhangi bir nesne (trend çizgileri, fibonacci çizgileri, gann hariç) var mı?

Grafiğe bazı işaretler koymam ve onlardan bilgi almam gerekiyor. Bir eğilim çizin. çizgiler, fibo, vs. - çok hantal ve yavaş...

Cevaplar için teşekkürler!

PS Öğrenmeye yeni başladım...

 
ilmel :

Herkese selam !

Grafikte böyle bir grafik nesne var.

Parametrelerinde, zaman, değer, kod. Değer, nesnenin bulunduğu fiyata karşılık gelir.

Bir şekilde zamanını ve değerini alabilir miyim (bir işlev veya başka bir şey aracılığıyla)?

\\\\\

Daha geniş soru şu şekilde sorulabilir: Bir kerede zaman ve fiyat alabileceğiniz herhangi bir nesne (trend çizgileri, fibonacci çizgileri, gann hariç) var mı?

Grafiğe bazı işaretler koymam ve onlardan bilgi almam gerekiyor. Bir eğilim çizin. çizgiler, fibo, vs. - çok hantal ve yavaş...

Cevaplar için teşekkürler!

PS Öğrenmeye yeni başladım...

https://docs.mql4.com/ru/objects/objectgetdouble
https://docs.mql4.com/ru/objects/objectgetinteger
Neden: