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

 
abeiks :

Merhaba!

Bir TP pozisyonunun kapalı olup olmadığını nasıl belirleyebilirim? OrderClosePrice()==OrderTakeProfit() öğesinin kullanmanın doğru yolu olacağını düşünmüyorum.

Varsa sipariş yorumunda [tp] arayın...

 
AlexeyVik :

Varsa sipariş yorumunda [tp] arayın...


Teşekkür ederim.
 

Merhaba Pro.

lütfen hatayı düzeltmeme yardım edin...

gösterge çalışıyor.

0. çubukta sinyal tetiklenir.

ancak mevcut çubuğa başka tikler geldiğinde tekrar ateşlenir ve yeni sinyaller verir.

ve bir Sell or Buy olayı meydana geldiğinde, olayın o anki fiyatının yerine bir daire içindeki bu sinyalin konulmasına ve bu açık çubukta daha fazla olay işlenmemesine ihtiyacım var.

bu yeni sinyaller ve daireler bu çubukta olmamalıdır.

________________________

Bunun tamamen saçmalık, yanlış sinyaller vb. olduğunu söyleyeceğinizi anlıyorum ama buna ihtiyacım var.

Bir bayrak, etiket vb. oluşturmam gerektiğini biliyorum - ama dili kendim çalışmak için zamanım yok.

______________________________

Eklenen satırları renkle işaretleyerek ekli dosyaya böyle bir bayrak eklerseniz çok minnettar olurum.....

Teşekkürler ve umarım biri cevap verir

Dosyalar:
 
alvlaf :

Birkaç hata veriyor, düzeltmek mümkün olmadı. Burada sorun ne?

//+------------------------------------------- --------------------+
//| BB1.mq4 |
//| Telif hakkı 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------- --------------------+
#property telif hakkı "Telif hakkı 2016, MetaQuotes Software Corp."
#özellik bağlantısı "https://www.mql5.com"
#özellik sürümü "1.00"
#mülkiyet katı

dış çift Lot = 1; // Çok güzelsin
harici intExp = 1; // Son
harici int Bekle = 2; // Bir yöndeki mum sayısı
extern int Zaman Aşımı = 1; // Zaman aralığı
dış çift Çarpan = 3; // Çarpan
dış int kayma = 5; // kayma
harici int Sihir = 774274; // Büyü
extern int MaxOpenOrders = 1; // Maksimum sipariş sayısı

int bilet, Tür, SymbolCount;
çift fiyat, çok;

girdi dizisi TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // ticaret sembolleri

stringSymbols[50]; // 50, olası maksimum karakter sayısıdır


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

int OnInit()

{

if (IsTesting() || !ExtractSymbols())

{

SembolSayı = 1;

Semboller[0] = Sembol();

}

dönüş(INIT_SUCCESSED);

}

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

bool ExtractSymbols()

{

ushort Virgül = StringGetCharacter(",", 0);

SymbolCount = StringSplit(TradeSymbols, Virgül, Semboller);

for (int i = 0; i < SymbolCount; i++)

{

StringToUpper(Semboller[i]);

Semboller[i] = StringTrimRight(Symbols[i]); // rastgele boşluklara karşı koruma

Symbols[i] = StringTrimLeft(Symbols[i]);

}

if (SymbolCount > 0) return(true);

dönüş(yanlış);

}

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

geçersiz OnTick()

{

için (int i=0; i<SymbolCount; i++)

{

if (CountTrades() == 0) // Emir sayısı sıfıra eşit olmalıdır

{

if (((TypeLastHistOrder() == OP_BUY && FiyatCloseLastHistOrder(OP_BUY) < FiyatOpenLastHistOrder(OP_BUY)) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) && MaxOpenOrders > OrdersTotal())

// Son anlaşma kârsızsa, aynısı açılır, ancak artan lotla

{

Tür = TypeLastHistOrder();

if (Tür == OP_BUY) Fiyat = LastAsk;

if (Tür == OP_SELL) Fiyat = LastBid;

Parti = NormalizeDouble(LotsLastHistOrder()*Çarpan, 2);

bilet = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())

// Son ticaretin karı sıfırsa, aynısını aç

{

Tür = TypeLastHistOrder();

if (Tür == OP_BUY) Fiyat = LastAsk;

if (Tür == OP_SELL) Fiyat = LastBid;

Parti = NormalizeDouble(LotsLastHistOrder(), 2);

bilet = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > FiyatOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// Son işlem karlıysa, sipariş açılır

{

if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())

{

bilet = OrderSend(Symbols[i], OP_BUY, Lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())

{

bilet = OrderSend(Symbols[i], OP_SELL, Lot, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

}

}

}

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

int CountTrades(int tipi = -1)

{

int cnt = 0;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++;

}

}

dönüş(cnt);

}

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

int CountHistTrades(int tipi = -1)

{

int cnt = 0;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++;

}

}

dönüş(cnt);

}

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

bool SignalBuy(stringSym)

{

for (int i=1; i<=Bekle; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // Burada istenen zaman dilimini belirtin

çift O = iOpen(Sym, PERIOD_M5, i);

if (C > O) döner(yanlış);

}

if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Bekle == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

dönüş(yanlış);

}

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

bool SignalSell(stringSym)

{

for (int i=1; i<=Bekle; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // Burada istenen zaman dilimini belirtin

çift O = iOpen(Sym, PERIOD_M5, i);

if (C < O) döner(yanlış);

}

if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Bekle == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

dönüş(yanlış);

}

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

tarihsaat TimeLastHistOrder(int tipi = -1)

{

tarihsaat sonzaman = 0;

tarihsaat açıksaat=0;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > geçen sefer)

{

lasttime = OrderCloseTime();

açılış zamanı = OrderOpenTime();

}

}

}

}

dönüş (açık zaman);

}

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

intTypeLastHistOrder()

{

tarihsaat = 0;

int türü = -1;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Sihirli)

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

type = OrderType();

}

}

}

}

dönüş(tür);

}

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

double LotsLastHistOrder(int tipi = -1)

{

tarihsaat = 0;

çift lot = 0;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderOpenTime() > zaman)

{

zaman = OrderOpenTime();

lot = OrderLots();

}

}

}

}

dönüş(lot);

}

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

double PriceCloseLastHistOrder(int tipi = -1)

{

tarihsaat = 0;

çift fiyat = 0;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

fiyat = OrderClosePrice();

}

}

}

}

iade(fiyat);

}

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

double PriceOpenLastHistOrder(int tipi = -1)

{

tarihsaat = 0;

çift fiyat = 0;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

fiyat = OrderOpenPrice();

}

}

}

}

iade(fiyat);

}

Alexander, eskisinden daha da kötüleşti, eskisi gibi iki farklı enstrüman açmanın yanı sıra, aynı enstrüman için aynı anda birkaç pozisyon açmayı başarıyor. Bir yerde biraz fazla zekiyiz.
 

Lütfen haberlerde ticaret yapmama yardım edin. Gerçekten iki ana işlevi olması gereken bir danışmana ihtiyacımız var.

İlk işlev: belirli bir TP ve SL ile bekleyen emirleri , belirli bir zamanda, belirli bir fiyat seviyesinden yerleştirme.
İkinci işlev: Tasarrufları fiyata paralel tutun. Yani, onları fiyatla birlikte hareket ettirin (elle yapmak çok kasvetli). Ve belirli bir zamanda, haber bülteni sırasında bu eylemi durdurun ve fiyatın siparişlerden birine ulaşmasını bekleyin. Bundan sonraki ikinci sipariş hemen silinir.

Tekrar:
Haberden 2 dakika önce fiyattan 10 puan uzaklıkta iki zıt stop emri verilir, fiyata paralel hareket etme fonksiyonu hemen devreye girer, 2 dakika fiyat ile hareket eder, bir emir fiyattan kaçar , ikincisi fiyatı yakalar. Haberin yayınlanması sırasında, bekleyenleri taşıma işlevini kapatın ve ardından siparişlerden birinin bozulmasını bekleyin. Birincisinin bozulmasından sonraki ikincisi hemen kaldırılır.

EA'nın özelliklerinde değiştirilebilen değişkenler (yaklaşık olarak hayal ettiğim gibi, gerçek uygulamanın ne olduğunu bilmiyorum):

TP - 600 (varsayılan)

Trall - 300 (varsayılan)

SL - 100 (varsayılan)

Pip - 100 (varsayılan fiyattan uzaklık)

Kayma - 100 (varsayılan olarak pip cinsinden kayma)

Parti - 0.1

Risk - yüzde 10 // (pekala, bu gerekli değil, bir şey olursa daha sonra soracağım)

TimeNews1On - true (zamanı girmek için aşağıdaki hücreleri kullanın, false - EA bunları takas etmez)

TimeNewsHour - saat (haber yayın zamanı 1)

TimeNewsMin - dakika (haber yayınlanma zamanı 1)

TimeNews2On - yanlış (varsayılan)

TimeNewsHour - saat (haber yayınlanma zamanı 2)

TimeNewsMin - dakika (haber yayınlanma zamanı 2)

TimeNews3On - yanlış

TimeNewsHour - saat (haber yayın zamanı 3)

TimeNewsMin - dakika (haber yayınlanma süresi 3)

TimeNews4On - yanlış

TimeNewsHour - saat (haber yayın zamanı 4)

TimeNewsMin - dakika (haber yayınlanma süresi 4)

TimeNews5On - yanlış

TimeNewsHour - saat (haber yayınlanma zamanı 5)

TimeNewsMin - dakika (haber yayınlanma zamanı 5)


Insta, beş işaretli


Tüm bunları manuel olarak yapıyorum, bu bir angarya ve şimdi haberleri çözmek için zaman yok, danışmanı sabah veya akşam çiftler halinde koymak istiyorum, o gün haber olacak, böylece hepsi işe yarayacak. dışarı.
--------------------------------------

Bu tür danışmanları tanıyorsanız, tanıştıysanız, lütfen paylaşın

Şimdiden teşekkür ederim!

 
alvlaf :

Orijinal kodunuza geri dönelim. Şu şekilde deneyin:

int OnInit()

{

if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);

dönüş(INIT_SUCCESSED);

}

geçersiz OnDeInit()

{

GlobalVariableSet("YeniSiparişlere İzin Ver",1);

}

geçersiz OnTick()

{

if (CountTrades() == 0) // Emir sayısı sıfıra eşit olmalıdır

{

if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))

// Son anlaşma kârsızsa, aynısı açılır, ancak artan lotla

{

GlobalVariableSet("YeniSiparişlere İzin Ver", 0);

Tür = TypeLastHistOrder();

if (Tip == OP_BUY) Fiyat = Sor;

if (Tür == OP_SELL) Fiyat = Teklif;

Parti = NormalizeDouble(LotsLastHistOrder()*Çarpan, 2);

bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)

// Son ticaretin karı sıfırsa, aynısını aç

{

GlobalVariableSet("YeniSiparişlere İzin Ver", 0);

Tür = TypeLastHistOrder();

if (Tip == OP_BUY) Fiyat = Sor;

if (Tür == OP_SELL) Fiyat = Teklif;

Parti = NormalizeDouble(LotsLastHistOrder(), 2);

bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > FiyatOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// Son işlem karlıysa, sipariş açılır

{

if (GlobalVariableGet("AllowNewOrders") > 0) return;

if (SignalBuy() && MaxOpenOrders > OrdersTotal())

{

bilet = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);

}

if (SignalSell() && MaxOpenOrders > OrdersTotal())

{

bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);

}

}

}

}

Kontrol etmedim, çünkü toplam 1 sipariş limiti olan danışmanın birkaç kopyasının hangi sembolün (karlı bir seriden sonra) ticarete başlamak için daha iyi olduğunu nasıl belirleyeceğini anlamıyorum?

 
BooGUY :


Lütfen haberlerde ticaret yapmama yardım edin. Gerçekten iki ana işlevi olması gereken bir danışmana ihtiyacımız var.

İlk işlev: belirli bir TP ve SL ile bekleyen emirleri , belirli bir zamanda, belirli bir fiyat seviyesinden yerleştirme.
İkinci işlev: Tasarrufları fiyata paralel tutun. Yani, onları fiyatla birlikte hareket ettirin (elle yapmak çok kasvetli). Ve belirli bir zamanda, haber bülteni sırasında bu eylemi durdurun ve fiyatın siparişlerden birine ulaşmasını bekleyin. Bundan sonraki ikinci sipariş hemen silinir.

Tekrar:
Haberden 2 dakika önce fiyattan 10 puan uzaklıkta iki zıt stop emri verilir, fiyata paralel hareket etme fonksiyonu hemen devreye girer, 2 dakika fiyat ile hareket eder, bir emir fiyattan kaçar , ikincisi fiyatı yakalar. Haberin yayınlanması sırasında, bekleyenleri taşıma işlevini kapatın ve ardından siparişlerden birinin bozulmasını bekleyin. Birincisinin bozulmasından sonraki ikincisi hemen kaldırılır.

Bu tür danışmanları tanıyorsanız, tanıştıysanız, lütfen paylaşın


Şimdiden teşekkür ederim!

Sana bir dosyadan haber verisi okuma kodunu gönderebilirim, işine yarayabilir. Haftada bir ekonomik takvime bakarsınız, dikkat etmeniz gereken o haberlerin folder_with_terminal\MQL4\Files\novosti.txt dosyasına data girersiniz, hatta haberden hemen önce danışmanı açabilirsiniz (takip edebilirsiniz). örneğin, böyle bir danışmanla Amerikan oturumunun başlangıcı - aniden güçlü bir hareket olacak). Ticaret açısından kod henüz kesinleşmedi, çünkü birkaç kez haberlerde ciddi şekilde “atıldım” :)) En son sürüm farklı mesafelerde altı emir (3 al stop + 3 sat stop) yerleştiriyor. farklı kar al... Genel olarak haber kodu çalışıyor, ancak ticaret kodunun iyileştirilmesi gerekiyor.

#mülkiyet katı

girdi dizisi NewsFilename = "novosti.txt"; // Haber içeren metin dosyasının adı

giriş int DakikaÖnce = 5; // Sipariş vermek için haber bülteninden kaç dakika önce

int DakikaSonrası1 = 15; // 1. grubun siparişlerini silmek için haberin yayınlanmasından kaç dakika sonra

giriş int DakikaAfter2 = 30; // 2. grubun siparişlerini silmek için haberin yayınlanmasından kaç dakika sonra

giriş int Dakika Sonra3 = 30; // 3. grubun siparişlerini silmek için haberin yayınlanmasından kaç dakika sonra

girdi int FiyatIndent1 = 15; // Puan cinsinden fiyattan mahsup

girdi int FiyatIndent2 = 5; // Bir önceki kazançtan puan olarak girinti

giriş int TakeProfit1 = 40; // Puan olarak 1 grup için kar alma boyutu

girdi int TakeProfit2 = 60; // 2. grup için puan olarak kâr al boyutu

girdi int TakeProfit3 = 100; // 3. grup için puan olarak kar al boyutu

giriş int StopLoss = 20; // Puan cinsinden tüm siparişler için kayıp boyutunu durdur

giriş çift Çarpan1 = 1.0; // 2. grubun siparişlerinin çokluğuna katsayı

giriş çift Çarpan2 = 2.0; // 3. grubun siparişlerinin çokluğuna katsayı

girdi int MaksimalRisk = 10; // Yüzde olarak maksimum risk

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

tarihsaat Times[200], LastTime;

diziSembolleri[200];

bool NewsPassed[200];

int NewsCount;

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

int OnInit()

{

// En son haberler yükleniyor

if (!LoadNews()) return(INIT_FAILED);

dönüş(INIT_SUCCESSED);

}

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

geçersiz OnTick()

{

if (!IsTradeAllowed()) dönüşü;

tarihsaat TestTime = iTime(Symbol(), PERIOD_H1, 0);

// Her günün başında haberleri güncelle

if (ZamanGünü(TestZamanı) != ZamanGünü(Son Zaman))

{

geçen zaman = test zamanı;

if (!LoadNews())

{

Alert("Haber güncellemesi başarısız!");

dönüş;

}

}

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

for (int i = 0; i < NewsCount; i++)

{

// Haber bülteninden önce ara siparişleri verin

if (Times[i] > TimeCurrent() && Times[i] - TimeCurrent() <= MinutesBefore * 60 && !NewsPassed[i])

{

PrintFormat("Geçerli saat - %s, para birimine göre sipariş verme zamanı - %s", TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES), Symbols[i]);

KurulumSiparişleri(Semboller[i]);

NewsPassed[i] = doğru;

}

}

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

}

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

bool LoadNews()

{

int Sayı, Tik = 0;

string Str, Veri[40];

ResetLastError();

if (!FileIsExist(NewsFilename, 0))

{

PrintFormat("%s haber dosyası mevcut değil.", HaberDosyaadı);

Print("Dosya, test sırasında \\MQL4\\Files klasöründe - \\Tester\\Files klasöründe bulunmalıdır.");

dönüş(yanlış);

}

int Handle = FileOpen(NewsFilename, FILE_READ|FILE_SHARE_READ|FILE_TXT);

if (İşle != INVALID_HANDLE)

{

while (!FileIsEnding(Handle))

{

Str = FileReadString(İşlemci);

Say = StringSplit(Str, StringGetChar(" ", 0), Veri);

for (int i = 1; i < Sayı; i = ben + 2)

{

Times[Tick] = StringToTime(Data[0] + " " + Data[i]);

Semboller[Tick] = Veri[i + 1];

Kene++;

}

}

FileClose(Kolu);

NewsCount = İşaretle;

for (int i = 0; i < NewsCount; i++)

{

if (Times[i] > TimeCurrent()) NewsPassed[i] = false;

başka NewsPassed[i] = false;

}

PrintFormat("Yüklenen haber sayısı - %i.", NewsCount);

dönüş(doğru);

}

PrintFormat("%s dosyası açılamıyor. Hata kodu %d.", NewsFilename, GetLastError());

dönüş(yanlış);

}

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

geçersiz SetupOrders(stringSym)

{

int Bilet, Kaz, Say;

çift Fiyat, TP, SL, Parti;

datetime KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;

dizi SymList[7];

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

if (Sim == "AUD")

{

SymList[0] = "AUDCAD"; SymList[1] = "AUDCHF"; SymList[2] = "AUDJPY"; SymList[3] = "AUDNZD";

SymList[4] = "USDUSD"; SymList[5] = "EURAUD"; SymList[6] = "GBPAUD";

}

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

if (Sym == "CAD")

{

SymList[0] = "AUDCAD"; SymList[1] = "CADCHF"; SymList[2] = "CADJPY"; SymList[3] = "EURCAD";

SymList[4] = "GBPCAD"; SymList[5] = "NZDCAD"; SymList[6] = "USDCAD";

}

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

if (Sim == "CHF")

{

SymList[0] = "AUDCHF"; SymList[1] = "CADCHF"; SymList[2] = "EURCHF"; SymList[3] = "GBPCHF";

SymList[4] = "CHFJPY"; SymList[5] = "NZDCHF"; SymList[6] = "USDCHF";

}

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

if (Sim == "EUR")

{

SymList[0] = "EURAUD"; SymList[1] = "EURCAD"; SymList[2] = "EURCHF"; SymList[3] = "EURGBP";

SymList[4] = "EURJPY"; SymList[5] = "EURNZD"; SymList[6] = "EURUSD";

}

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

if (Sym == "GBP")

{

SymList[0] = "EURGBP"; SymList[1] = "GBPAUD"; SymList[2] = "GBPCAD"; SymList[3] = "GBPCHF";

SymList[4] = "GBPJPY"; SymList[5] = "GBPNZD"; SymList[6] = "GBPUSD";

}

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

if (Sim == "JPY")

{

SymList[0] = "AUDJPY"; SymList[1] = "CADJPY"; SymList[2] = "CHFJPY"; SymList[3] = "EURJPY";

SymList[4] = "GBPJPY"; SymList[5] = "NZDJPY"; SymList[6] = "USDJPY";

}

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

if (Sym == "NZD")

{

SymList[0] = "AUDNZD"; SymList[1] = "EURNZD"; SymList[2] = "GBPNZD"; SymList[3] = "NZDCAD";

SymList[4] = "NZDCHF"; SymList[5] = "NZDJPY"; SymList[6] = "NZDUSD";

}

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

if (Sim == "USD")

{

SymList[0] = "AUUSD"; SymList[1] = "EURUSD"; SymList[2] = "GBPUSD"; SymList[3] = "NZUSD";

SymList[4] = "USDCAD"; SymList[5] = "USDCHF"; SymList[6] = "USDJPY";

}

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

için (int i = 0; i < 7; i++)

{

sayı = 0;

Dig = int(MarketInfo(SymList[i], MODE_DIGITS));

Lot = NormalizeDouble(0.01, 2);

// Satın almak

KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;

Fiyat = NormalizeDouble(MarketInfo(SymList[i], MODE_ASK) + PriceIndent1 / pow(10, Dig-1), Dig);

TP = NormalizeDouble(Fiyat + TakeProfit1 / pow(10, Dig-1), Dig);

SL = NormalizeDouble(Fiyat - StopLoss / pow(10, Dig-1), Dig);

Bilet = OrderSend(SymList[i], OP_BUYSTOP, Parti, Fiyat, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen);

if (Ticket > 0) Count++; else PrintFormat("%i emri oluşturulurken hata, sembol %s, fiyat %f, %f al, %f dur, %f partisi.", GetLastError(), SymList[i], Price, TP, SL, Lot) ;

KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter2) * 60;

Fiyat = NormalizeDouble(TP + PriceIndent2 / pow(10, Dig-1), Dig);

TP = NormalizeDouble(Fiyat + TakeProfit2 / pow(10, Dig-1), Dig);

SL = NormalizeDouble(Fiyat - StopLoss / pow(10, Dig-1), Dig);

Bilet = OrderSend(SymList[i], OP_BUYSTOP, Lot * Multiplier1, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen);

if (Ticket > 0) Count++; else PrintFormat("%i emri oluşturulurken hata, sembol %s, fiyat %f, %f al, %f'yi durdur, %f partisi.", GetLastError(), SymList[i], Fiyat, TP, SL, Parti* çarpanı1 );

KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter3) * 60;

Fiyat = NormalizeDouble(TP + PriceIndent2 / pow(10, Dig-1), Dig);

TP = NormalizeDouble(Fiyat + TakeProfit2 / pow(10, Dig-1), Dig);

SL = NormalizeDouble(Fiyat - StopLoss / pow(10, Dig-1), Dig);

Bilet = OrderSend(SymList[i], OP_BUYSTOP, Lot*Multiplier2, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen);

if (Ticket > 0) Count++; else PrintFormat("%i emri oluşturulurken hata, sembol %s, fiyat %f, %f al, %f'yi durdur, %f partisi.", GetLastError(), SymList[i], Fiyat, TP, SL, Parti* çarpanı2 );

// Satış

KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;

Fiyat = NormalizeDouble(MarketInfo(SymList[i], MODE_BID) - PriceIndent1 / pow(10, Dig-1), Dig);

TP = NormalizeDouble(Fiyat - TakeProfit1 / pow(10, Dig-1), Dig);

SL = NormalizeDouble(Fiyat + StopLoss / pow(10, Dig-1), Dig);

Bilet = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed);

if (Ticket > 0) Count++; else PrintFormat("%i emri oluşturulurken hata, sembol %s, fiyat %f, %f al, %f dur, %f partisi.", GetLastError(), SymList[i], Price, TP, SL, Lot) ;

KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter2) * 60;

Fiyat = NormalizeDouble(TP - PriceIndent2 / pow(10, Dig-1), Dig);

TP = NormalizeDouble(Fiyat - TakeProfit2 / pow(10, Dig-1), Dig);

SL = NormalizeDouble(Fiyat + StopLoss / pow(10, Dig-1), Dig);

Bilet = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed);

if (Ticket > 0) Count++; else PrintFormat("%i emri oluşturulurken hata, sembol %s, fiyat %f, %f al, %f'yi durdur, %f partisi.", GetLastError(), SymList[i], Fiyat, TP, SL, Parti* çarpanı1 );

KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter3) * 60;

Fiyat = NormalizeDouble(TP - PriceIndent2 / pow(10, Dig-1), Dig);

TP = NormalizeDouble(Fiyat - TakeProfit3 / pow(10, Dig-1), Dig);

SL = NormalizeDouble(Fiyat + StopLoss / pow(10, Dig-1), Dig);

Bilet = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed);

PrintFormat("%s sembolü için %i sipariş verildi.", SymList[i], Count);0 }

}

Haber dosyası şöyle görünür:

15.09.2016 01:45 NZD 04:30 AUD 10:30 CHF 14:00 GBP 15:30 USD

16.09.2016 15:30 USD 17:00 USD

vb...

 
A13ksandr :

Orijinal kodunuza geri dönelim. Şu şekilde deneyin:

int OnInit()

{

if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);

dönüş(INIT_SUCCESSED);

}

geçersiz OnDeInit()

{

GlobalVariableSet("YeniSiparişlere İzin Ver",1);

}

geçersiz OnTick()

{

if (CountTrades() == 0) // Emir sayısı sıfıra eşit olmalıdır

{

if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))

// Son anlaşma kârsızsa, aynısı açılır, ancak artan lotla

{

GlobalVariableSet("YeniSiparişlere İzin Ver", 0);

Tür = TypeLastHistOrder();

if (Tip == OP_BUY) Fiyat = Sor;

if (Tür == OP_SELL) Fiyat = Teklif;

Parti = NormalizeDouble(LotsLastHistOrder()*Çarpan, 2);

bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)

// Son ticaretin karı sıfırsa, aynısını aç

{

GlobalVariableSet("YeniSiparişlere İzin Ver", 0);

Tür = TypeLastHistOrder();

if (Tip == OP_BUY) Fiyat = Sor;

if (Tür == OP_SELL) Fiyat = Teklif;

Parti = NormalizeDouble(LotsLastHistOrder(), 2);

bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > FiyatOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// Son işlem karlıysa, sipariş açılır

{

if (GlobalVariableGet("AllowNewOrders") > 0) return;

if (SignalBuy() && MaxOpenOrders > OrdersTotal())

{

bilet = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);

}

if (SignalSell() && MaxOpenOrders > OrdersTotal())

{

bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);

}

}

}

}

Kontrol etmedim, çünkü toplam 1 sipariş limiti olan danışmanın birkaç kopyasının hangi sembolün (karlı bir seriden sonra) ticarete başlamak için daha iyi olduğunu nasıl belirleyeceğini anlamıyorum?

Alexander, her sembolde, ayarlarda tek yönde ayarlanan bir sıradaki mum sayısını beklemeli ve ardından seriye başlamalıdır, yani bu koşul o sembol için önce hangi sembol üzerinde çalışacaktır ve ilk anlaşmayı açmalıdır. . Aynı zamanda, ilk seri kârla bitene kadar diğer sembollerde seri açılmasını yasaklamak gerekir.

Verdiğiniz son kod zaten bir adım ileri - herhangi bir işlem açmıyor (bu, yasağın yürürlükte olduğu anlamına geliyor). Ta ki neden hiç olmadığını anlayana kadar. Derginin ekran görüntüsü ektedir.

 

Belki de kodu nasıl yapıştıracağınızı öğrenmenin zamanı gelmiştir?!

 int OnInit ()

{

   if (! GlobalVariableCheck ( "AllowNewOrders" )) GlobalVariableSet ( "AllowNewOrders" , 1 );

   return ( INIT_SUCCEEDED );

}

void   OnDeInit()

{

   GlobalVariableSet ( "AllowNewOrders" , 1 ); 

} 

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);

      }

       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);

      }

       if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))

      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

      || CountHistTrades() == 0 ) // Если последняя сделка прибыльная, то открывается ордер

      {

         if ( GlobalVariableGet ( "AllowNewOrders" ) > 0 ) return ;

         if (SignalBuy() && MaxOpenOrders > OrdersTotal ())

         {

            ticket = OrderSend ( Symbol (), OP_BUY, Lots, Ask, Slippage, 0 , 0 , IntegerToString (Exp), Magic);

             if (ticket> 0 ) GlobalVariableSet ( "AllowNewOrders" , 0 );

         }

         if (SignalSell() && MaxOpenOrders > OrdersTotal ())

         {

            ticket = OrderSend ( Symbol (), OP_SELL, Lots, Bid, Slippage, 0 , 0 , IntegerToString (Exp), Magic);

             if (ticket> 0 ) GlobalVariableSet ( "AllowNewOrders" , 0 );

         }

      }

   }

} 
 
abeiks : Belki de kodu nasıl yapıştıracağınızı öğrenmenin zamanı gelmiştir?!
 int OnInit ()                     // ИХМО так нагляднее
{
   if (! GlobalVariableCheck ( "AllowNewOrders" )) GlobalVariableSet ( "AllowNewOrders" , 1 );
   return ( INIT_SUCCEEDED );
}

void   OnDeInit()
{
   GlobalVariableSet ( "AllowNewOrders" , 1 ); 
} 

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);
      }

       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);
      }

       if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0 ) // Если последняя сделка прибыльная, то открывается ордер
      {
         if ( GlobalVariableGet ( "AllowNewOrders" ) > 0 ) return ;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal ())
         {
            ticket = OrderSend ( Symbol (), OP_BUY, Lots, Ask, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
             if (ticket> 0 ) GlobalVariableSet ( "AllowNewOrders" , 0 );
         }

         if (SignalSell() && MaxOpenOrders > OrdersTotal ())
         {
            ticket = OrderSend ( Symbol (), OP_SELL, Lots, Bid, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
             if (ticket> 0 ) GlobalVariableSet ( "AllowNewOrders" , 0 );
         }
      }
   }
}
Neden: