MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1347

 

Danışmanı hiçbir şekilde bitiremiyorum. İşin özü basittir - ilk önce satın alma için tetikleyici olan bir dikdörtgen çizerim, fiyat kendi alanına ulaşırsa ikincisini çizerim - fiyat oraya ulaştı - anlaşma kapatılmalıdır.

Ve şu çıkıyor - fiyat alan içinde açılıp kapanmaya başlıyor. Neyi yanlış yapıyorum?


//+------------------------------------------- --------------------+

//| DİKDÖRTGENLER OP_BUY.mq4 |

//+------------------------------------------- --------------------+

#mülkiyet telif hakkı ""

#özellik bağlantısı ""

#özellik sürümü "1.00"

#mülkiyet katı


harici int Sihir = 777701;

harici çift Parti = 0.01;

dış int kayma = 3;



int bileti;

int OrderOfSymbol;




//+------------------------------------------- --------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- --------------------+

int OnInit()

{

//---

dönüş(INIT_SUCCESSED);

}

//+------------------------------------------- --------------------+

//| Uzman başlatmasızlaştırma işlevi |

//+------------------------------------------- --------------------+

geçersiz OnDeinit(const int nedeni)

{

//---

}

//+------------------------------------------- --------------------+

//| Uzman onay işlevi |

//+------------------------------------------- --------------------+

geçersiz OnTick()

{

//---

//Bir dikdörtgen olup olmadığını kontrol edin:

if(NesnelerToplam(OBJ_RECTANGLE)==0)

{Comment("Satın alma işlemi açmak için bir dikdörtgen çizin!");}


// Dikdörtgenin ADI alın:

for(int n=0;n<ObjectsTotal();n++)

{

stringname=NesneAdı(n);

if(ObjectType(name)==OBJ_RECTANGLE)

{

tarihsaat t1a = (tarihsaat) ObjectGet(isim,OBJPROP_TIME1);

tarihsaat t2a = (tarihsaat) ObjectGet(isim,OBJPROP_TIME2);


double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Rakamlar);

double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Rakamlar);

OrderOfSymbol=KarşıSiparişTipi(-1);

if (Simge Sırası<1)

if (Kapat[1]>Aç[1])

if(TimeCurrent()>t1a && TimeCurrent()< t2a &&

Teklif < p1a && Teklif > p2a )

{

bilet = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "sipariş açık", Magic, 0, Blue);

}

}

}

// Zaten ikinci bir dikdörtgen olup olmadığını kontrol edin:

if(ObjectsTotal(OBJ_RECTANGLE)==1)

{Comment("Satın alma işlemini kapatmak için ikinci bir dikdörtgen çizin!");}


// Dikdörtgenin ADI alın:

for(int n=0;n<ObjectsTotal();n++)

{

stringname=NesneAdı(n);

if(ObjectType(name)==OBJ_RECTANGLE)

{

tarihsaat t1b = (tarihsaat) ObjectGet(isim,OBJPROP_TIME1);

tarihsaat t2b = (tarihsaat) ObjectGet(isim,OBJPROP_TIME2);


double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Rakamlar);

double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Rakamlar);


if(TimeCurrent()>t1b && TimeCurrent()< t2b &&

Teklif < p1b && Teklif > p2b )

CloseBuyPositions1();

}

}

// Zaten 2 dikdörtgen olup olmadığını kontrol edin:

if(NesnelerToplam(OBJ_CHANNEL)==2)

{Comment("Satın alma emirlerini açma ve kapama alanları belirlendi - alım satım devam ediyor!");}


}

//+------------------------------------------- --------------------+

geçersiz CloseBuyPositions1()

{

for(int i = OrdersTotal() - 1; i >= 0; i--)

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

if(OrderMagicNumber() == Sihirli)

if(OrderSymbol() == Symbol())

{



if(OrderType()==OP_BUY)

{

if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Siparişi Kapat");}

}

}

}

//+------------------------------------------- --------------------+

//| Geçerli sembol için siparişleri sayma |

//+------------------------------------------- --------------------+

int CounterOrderTradeType( ENUM_ORDER_TYPE order_type)

{

int cnt=0;

//----

for(int pos=OrdersTotal()-1;pos>=0;pos--)

{

if(OrderSelect(kon, SELECT_BY_POS, MODE_TRADES)==yanlış) devam et;

if(OrderSymbol()!=_Symbol) devam ediyor;

if(order_type == OrderType() || order_type == -1) cnt++;

}

//----

dönüş(cnt);

}

 
Порт-моне тв :

Kod göndermek için böyle bir işlev var, yardım için herkesin kodunuzu okuması daha uygun olacaktır.

 
MakarFX :

Kod göndermek için böyle bir işlev var, yardım için herkesin kodunuzu okuması daha uygun olacaktır.

Ona yardım etmeyecek. Boş satırlar sadece kendisi gibiler tarafından okunur.

 

Порт-моне тв :

Neyi yanlış yapıyorum?

Meydanın adının benzersizliği yok, herhangi bir kareniz var - alım satım için bir koşul

 
Порт-моне тв :

Bu da size yardımcı olacaktır


 

Lütfen bana hatayı nasıl düzelteceğimi söyle

 //+------------------------------------------------------------------+
#property copyright    "Copyright 2020,"
#property version      "1.0"
#property strict

//--- Inputs
int    side_position                    = 1 ;
input ENUM_BASE_CORNER   CornerInfo     = CORNER_RIGHT_UPPER ; 
input ENUM_BASE_CORNER   CornerInfo1    = CORNER_LEFT_UPPER ; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if (side_position == 2 )
   {
   CornerInfo  = CORNER_RIGHT_LOWER ; 
   CornerInfo1 = CORNER_LEFT_LOWER ;
   }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+

İşte hata

'CornerInfo' - constant cannot be modified      Wa.mq4  22      1
'CornerInfo1' - constant cannot be modified     Wa.mq4  23      1
2 errors, 0 warnings              3       1
 
Forallf :

Teşekkür ederim!

Benim için zevkti )

MakarFX :

Lütfen bana hatayı nasıl düzelteceğimi söyle

İşte hata

girdi değişkenleri değiştirilemez.

Bu şekilde mümkündür:

 input ENUM_BASE_CORNER   CornerInfo     = CORNER_RIGHT_UPPER ; 

ENUM_BASE_CORNER   MyCornerInfo     = CornerInfo; 


.......

if (side_position == 2 )
   {
   MyCornerInfo  = CORNER_RIGHT_LOWER ; 



 
Aleksei Stepanenko :

Benim için zevkti )

girdi değişkenleri değiştirilemez.

Bu şekilde mümkündür:

anladım teşekkürler

 
MakarFX :

Bu da size yardımcı olacaktır


Yardım etmedi. Ve karenin değerlerinin olması gerektiği gibi ikiden değil sondan alındığını anladım. Bunu nasıl kazanacağımı bilmiyorum. Kendim çözemez miydim? Ama mql aracını tam olarak bilmiyorum, bu yüzden burada soruyorum ve bana burada tarak teklif ediyorsunuz.

 
Порт-моне тв :

Yardım etmedi. Ve karenin değerlerinin olması gerektiği gibi ikiden değil sondan alındığını anladım. Bunu nasıl kazanacağımı bilmiyorum. Kendim çözemez miydim? Ama mql aracını tam olarak bilmiyorum, bu yüzden burada soruyorum ve bana burada tarak teklif ediyorsunuz.

Kodunuzun hitap ettiğiniz kişiler tarafından kolayca okunabilmesi için size taraklar öneririm (burada kötü niyetli bir amaç yoktur)

Karelerinize gelince, onları doğru bir şekilde tanımlamak için kökenlerini anlamanız gerekir, yani. onları mı çiziyorsun yoksa danışman mı