Kodlama yardımı - sayfa 238

 

Seçmek için seçenekler ekleme şansı var mı?

Örneğin,

Ayrı ayrı al ve ayrı sat

Modifikasyon: BE hepsi 0, +1 veya +2 pip satın al veya hepsini 0, 1 veya 2 pip sat?

Mümkün mü?

be.mq4

Dosyalar:
be.mq4  1 kb
 

Merhaba Mladen,

Birisi bana neyi yanlış yaptığımı söyleyebilir mi, çoğunlukla FX Gen kullanarak snippet'ler ve kodlar kullanarak mq4 derleyicisinden ve çevrimiçi forumlardan örnekler kullanarak yazıyorum. Daha kolay ticaret için stratejimi kodlamaya çalışıyorum, son siparişi başarıyla seçebildim bu kodu kullanarak.

geçersiz OpenNewTrade()

{ datetime lastTime = 0;

int lastTicket = -1; // Hiçbiri açık değil.

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& Sor - OrderOpenPrice() >= Grid*PipValue*Point

{

{

BuySipariş();

}

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& OrderOpenPrice() - Teklif >= Grid*PipValue*Puan

{

{

SellOrder();

}

}

}

dönüş(sonTicket);

}

başka

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

Bu koda bir göz atabilir misiniz, tarih ve sipariş biletini kullanarak önce en eski siparişi silmeye çalışıyorum, örneğin açık sipariş>2 ise en eski siparişi sil.

//------------------------------------------------ -------------

// Etasoft Inc. Forex EA ve Script Generator sürüm 4.1 EA

//------------------------------------------------ -------------

// Anahtar Kelimeler: MT4, Forex EA oluşturucu, EA oluştur, uzman danışman geliştirici

#özellik telif hakkı "Telif hakkı © 2011, Etasoft Inc. Forex EA Jeneratör v4.1"

#özellik bağlantısı

#Dahil etmek

#Dahil etmek

// dışa aktarılan değişkenler

harici int OrderId = 1;

extern int Kayma = 2;

dış çift Lot = 0,01;

extern int MaxOrdersAllowed = 2;// satın alma ve satma izin verilir

harici int Izgara = 10; // siparişleri açmak için pip cinsinden toplam mesafe

extern string EAComment = "564 test";

// yerel değişkenler

çift PipValue=1; // bu değişken 5 basamaklı aracıları desteklemek için burada

bool Sonlandırılmış = yanlış;

string LF = "\n"; // bunu, satır beslemelerine ihtiyaç duyduğunuz özel veya yardımcı program bloklarında kullanın

int NDigits = 4; // Flex tipi bloklarda çoğunlukla NormalizeDouble için kullanılır

int NesneSayısı = 0; // grafikte oluşturulan tüm nesnelerin sayısı, benzersiz adlara sahip nesnelerin oluşturulmasına izin verir

int akım = 0;

int init()

{

NDigits = Rakamlar;

if (yanlış) ObjectsDeleteAll(); // grafiği temizle

Yorum(""); // grafiği temizle

}

// Uzman başlangıç

int başlangıç()

{

if (Çubuk < 10)

{

Comment("Yeterli çubuk yok");

dönüş (0);

}

if (Sonlandırılmış == doğru)

{

Comment("EA Sonlandırıldı.");

dönüş (0);

}

OnEveryTick1();

}

geçersiz OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

IfOrderDoesNotExist2();

IfOrderDoesNotExist4();

MaksimumSipariş();

}

geçersiz IfOrderDoesNotExist2()

{

bool var = yanlış;

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

var = doğru;

}

}

başka

{

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

if (varsa == yanlış)

{

BuyPendingOrder();

}

}

geçersiz IfOrderDoesNotExist4()

{

bool var = yanlış;

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

var = doğru;

}

}

başka

{

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

if (varsa == yanlış)

{

SellPendingOrder();

}

}

void BuyPendingOrder()

{

int sona erme = TimeCurrent() + 60 * 0;

double fiyat = NormalizeDouble((Ask-((Ask-Bid)/2))), NDigits) + Grid*PipValue*Point;

çift SL = fiyat - 0*PipValue*Puan;

if (0 == 0) SL = 0;

çift TP = fiyat + 0*PipValue*Puan;

eğer (0 == 0) TP = 0;

if (0 == 0) sona erme = 0;

int bilet = OrderSend(Symbol(), OP_BUYSTOP, Lot, fiyat, Slippage, SL, TP, EAComment, OrderId, son kullanma, Mavi);

if (bilet == -1)

{

Print("OrderSend() hatası - ", ErrorDescription(GetLastError()));

}

}

geçersiz SellPendingOrder()

{

int sona erme = TimeCurrent() + 60 * 0;

double fiyat = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;

çift SL = fiyat + 0*PipValue*Puan;

if (0 == 0) SL = 0;

çift TP = fiyat - 0*PipValue*Puan;

eğer (0 == 0) TP = 0;

if (0 == 0) sona erme = 0;

int bilet = OrderSend(Symbol(), OP_SELLSTOP, Lot, fiyat, Slippage, SL, TP, EAComment, OrderId, son kullanma, Red);

if (bilet == -1)

{

Print("OrderSend() hatası - ", ErrorDescription(GetLastError()));

}

}

void MaximumOrder()

{

if (MaksOrdersAllowed> 0)

{

OrderCount();

}

}

geçersiz OrderCount()

{

int sayı = 0;

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

say++;

}

}

başka

{

Print("OrderSend() hatası - ", ErrorDescription(GetLastError()));

}

if (sayım > MaxOrdersAllowed )

{

SilOlestOrder();

}

}

geçersiz DeleteOldestOrder()

{

tarihsaat lastTime = 0;

int lastTicket = -1; // Hiçbiri açık değil.

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Kayma,Kırmızı);

}

}

}

dönüş(sonTicket);

}

başka

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

int tanım()

{

if (yanlış) ObjectsDeleteAll();

}

 
sulaimoney:
Merhaba Mladen,

Birisi bana neyi yanlış yaptığımı söyleyebilir mi, çoğunlukla FX Gen kullanarak snippet'ler ve kodlar kullanarak mq4 derleyicisinden ve çevrimiçi forumlardan örnekler kullanarak yazıyorum. Daha kolay ticaret için stratejimi kodlamaya çalışıyorum, son siparişi başarıyla seçebildim bu kodu kullanarak.

geçersiz OpenNewTrade()

{ datetime lastTime = 0;

int lastTicket = -1; // Hiçbiri açık değil.

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& Sor - OrderOpenPrice() >= Grid*PipValue*Point

{

{

BuySipariş();

}

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& OrderOpenPrice() - Teklif >= Grid*PipValue*Puan

{

{

SellOrder();

}

}

}

dönüş(sonTicket);

}

başka

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

Bu koda bir göz atabilir misiniz, tarih ve sipariş biletini kullanarak önce en eski siparişi silmeye çalışıyorum, örneğin açık sipariş>2 ise en eski siparişi sil.

//------------------------------------------------ -------------

// Etasoft Inc. Forex EA ve Script Generator sürüm 4.1 EA

//------------------------------------------------ -------------

// Anahtar Kelimeler: MT4, Forex EA oluşturucu, EA oluştur, uzman danışman geliştirici

#özellik telif hakkı "Telif hakkı © 2011, Etasoft Inc. Forex EA Jeneratör v4.1"

#özellik bağlantısı

#Dahil etmek

#Dahil etmek

// dışa aktarılan değişkenler

harici int OrderId = 1;

extern int Kayma = 2;

dış çift Lot = 0,01;

extern int MaxOrdersAllowed = 2;// satın alma ve satma izin verilir

harici int Izgara = 10; // siparişleri açmak için pip cinsinden toplam mesafe

extern string EAComment = "564 test";

// yerel değişkenler

çift PipValue=1; // bu değişken 5 basamaklı aracıları desteklemek için burada

bool Sonlandırılmış = yanlış;

string LF = "\n"; // bunu, satır beslemelerine ihtiyaç duyduğunuz özel veya yardımcı program bloklarında kullanın

int NDigits = 4; // Flex tipi bloklarda çoğunlukla NormalizeDouble için kullanılır

int NesneSayısı = 0; // grafikte oluşturulan tüm nesnelerin sayısı, benzersiz adlara sahip nesnelerin oluşturulmasına izin verir

int akım = 0;

int init()

{

NDigits = Rakamlar;

if (yanlış) ObjectsDeleteAll(); // grafiği temizle

Yorum(""); // grafiği temizle

}

// Uzman başlangıç

int başlangıç()

{

if (Çubuk < 10)

{

Comment("Yeterli çubuk yok");

dönüş (0);

}

if (Sonlandırılmış == doğru)

{

Comment("EA Sonlandırıldı.");

dönüş (0);

}

OnEveryTick1();

}

geçersiz OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

IfOrderDoesNotExist2();

IfOrderDoesNotExist4();

MaksimumSipariş();

}

geçersiz IfOrderDoesNotExist2()

{

bool var = yanlış;

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

var = doğru;

}

}

başka

{

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

if (varsa == yanlış)

{

BuyPendingOrder();

}

}

geçersiz IfOrderDoesNotExist4()

{

bool var = yanlış;

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

var = doğru;

}

}

başka

{

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

if (varsa == yanlış)

{

SellPendingOrder();

}

}

void BuyPendingOrder()

{

int sona erme = TimeCurrent() + 60 * 0;

double fiyat = NormalizeDouble((Ask-((Ask-Bid)/2))), NDigits) + Grid*PipValue*Point;

çift SL = fiyat - 0*PipValue*Puan;

if (0 == 0) SL = 0;

çift TP = fiyat + 0*PipValue*Puan;

eğer (0 == 0) TP = 0;

if (0 == 0) sona erme = 0;

int bilet = OrderSend(Symbol(), OP_BUYSTOP, Lot, fiyat, Slippage, SL, TP, EAComment, OrderId, son kullanma, Mavi);

if (bilet == -1)

{

Print("OrderSend() hatası - ", ErrorDescription(GetLastError()));

}

}

geçersiz SellPendingOrder()

{

int sona erme = TimeCurrent() + 60 * 0;

double fiyat = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;

çift SL = fiyat + 0*PipValue*Puan;

if (0 == 0) SL = 0;

çift TP = fiyat - 0*PipValue*Puan;

eğer (0 == 0) TP = 0;

if (0 == 0) sona erme = 0;

int bilet = OrderSend(Symbol(), OP_SELLSTOP, Lot, fiyat, Slippage, SL, TP, EAComment, OrderId, son kullanma, Red);

if (bilet == -1)

{

Print("OrderSend() hatası - ", ErrorDescription(GetLastError()));

}

}

void MaximumOrder()

{

if (MaksOrdersAllowed> 0)

{

OrderCount();

}

}

geçersiz OrderCount()

{

int sayı = 0;

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

say++;

}

}

başka

{

Print("OrderSend() hatası - ", ErrorDescription(GetLastError()));

}

if (sayım > MaxOrdersAllowed )

{

SilOlestOrder();

}

}

geçersiz DeleteOldestOrder()

{

tarihsaat lastTime = 0;

int lastTicket = -1; // Hiçbiri açık değil.

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Kayma,Kırmızı);

}

}

}

dönüş(sonTicket);

}

başka

Print("OrderSelect() hatası - ", ErrorDescription(GetLastError()));

}

int tanım()

{

if (yanlış) ObjectsDeleteAll();

}

Bunun gibi bir işlev kullanmayı deneyin:

void DeleteOldestOrder()

{

datetime lastTime = Time[0]+Period()*60;

int lastTicket = -1; // None open.

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

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

}

}

if (lastTicket>-1)

if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}
 

Teşekkürler Mladen

Kusursuz çalıştı, ancak forumda bu kadar uzun bir kod parçası yayınladığım için özür dilerim. Arayüze hala alışıyorum. Teşekkür ederim.

 

Gösterge otomatik olarak yenilenmiyor.

Burada ticaretim için çok uygun bir göstergem var.

Maalesef kendi kendine güncelleme yapmıyor. Yenilendiğini her zaman manuel olarak yenilemeliyim.

Bu sorunu çözmenin bir yolu var mı?

Çok yardımcı olurdu !!

Şimdiden teşekkürler.

Not: Sahip olduğum her şeyi ekledim.

Dosyalar:
 

Bildirim sms'ini istiyor. Kod nasıl görünüyor?

 
popej30:
Bildirim sms'ini istiyor. Kod nasıl görünüyor?

popej30

Bunun gibi yapın:

SendNotification ("göndermek istediğiniz bildirim mesajı");

 

Ve telefon numaranızı nereye giriyorsunuz? Numaram 0039 555-23-45. Nereden girilir?

Misal:

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}
 
popej30:
Ve telefon numaranızı nereye yazıyorsunuz? Numaram 0039 555-23-45. Nereden girilir?

Misal:

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}

İşte bunu nasıl yapabileceğinize dair iyi bir açıklama:

 
Jim Clark:
Gösterge otomatik olarak yenilenmiyor.

Burada ticaretim için çok uygun bir göstergem var.

Maalesef kendi kendine güncelleme yapmıyor. Yenilendiğini her zaman manuel olarak yenilemeliyim.

Bu sorunu çözmenin bir yolu var mı?

Çok yardımcı olurdu !!

Şimdiden teşekkürler.

Not: Sahip olduğum her şeyi ekledim.

Jim

Her şeyi yeniden yazmak yerine, çubukları hesaplamak için bir sınır ekledi ve ardından tüm bu çubuklar yeniden hesaplanır. Bu, yenileme sorununu çözmelidir (jutlar, BarsTocalculate'i makul bir seviyede tutar - çok büyük değil, çok küçük bir değerde tutar. Varsayılan olarak 1000 kullandım ve bu şekilde sorun yok gibi görünüyor). Denemek

Dosyalar:
Neden: