Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Yardıma ihtiyacım var.
http://forum.mql4.com/ru/67309#1011467
Söyle bana: siparişler her gün açılmıyor, takip çalışmıyor ve açık siparişler TP'ye göre kapatılmıyor. Neyi yanlış yaptım?
input int StartHour = 23; // Время ачало торговли
input int TakeProfit = 40; // TakeProfit
input int StopLoss = 40; // StopLoss
input int Lots = 0.1; // Лот для торговли
input int Magic = 22; // Магическое число
input int Trals = 20; // Дистанция тралинга в пунктах
input int _Step = 1; // Шаг
input bool _StepUse = true; // Использовать шаг или нет
void OnTick()
{
static bool IsFirstTick = false;
static int ticket = 0;
double lot=Lot_Normalize(Symbol(),Lots,1);
double sl= Dist_Normalize(Symbol(),Trals);
double step= Dist_Normalize(Symbol(),_Step);
int h= TimeHour(TimeCurrent());
if(h == StartHour)
{
Alert("TimeHor: ", h);
if (IsFirstTick == true)
IsFirstTick = false;
bool res;
res= OrderSelect(ticket, SELECT_BY_TICKET);
if(res == true)
{
if(OrderCloseTime() == 0)
{
bool res2;
res2 = OrderClose(ticket, Lots, OrderClosePrice(), 10);
if(res2 == false)
{
Alert("Error Closing Order #", ticket);
} Alert("Closing Order #", ticket);
}
}
if(Open[0] < Open[StartHour])
{
ticket = OrderSend(Symbol(), OP_BUYLIMIT, Lots, High[1],10, Low[1]-StopLoss*Point, High[1]+TakeProfit*Point,"Set bu ForexRobot");
Tralling_Stop(OrderSymbol(),Magic,sl,step,_StepUse);
if(ticket < 0)
{
Alert("Error Sending Order!");
} Alert("Sending Order! BUY_LIMIT");
}
else
{
ticket = OrderSend(Symbol(), OP_SELLLIMIT, Lots, Low[1],10, High[1]+StopLoss*Point, Low[1]+TakeProfit*Point,"Set bu ForexRobot");
Tralling_Stop(OrderSymbol(),Magic,sl,step,_StepUse);
if(ticket < 0)
{
Alert("Error Sending Order!");
} Alert("Sending Order! SEL_LLIMIT");
}
}
}
double Dist_Normalize(string Smv, int _Distancia)
{
int Dig= int(MarketInfo(Smv,MODE_DIGITS));
double Pip=MarketInfo(Smv,MODE_POINT);
if(Dig==3 || Dig==5)
return NormalizeDouble(_Distancia*10*Pip,Dig);
else return NormalizeDouble(_Distancia*Pip,Dig);
}
double Lot_Normalize(string Smv, double _lot, double _mult)
{
double minlot=MarketInfo(Smv,MODE_MINLOT);
double maxlot=MarketInfo(Smv,MODE_MAXLOT);
double steplot=MarketInfo(Smv,MODE_LOTSTEP);
double lot= _lot*_mult;
if(lot<=minlot) lot+minlot;
else if(lot>=maxlot) lot=minlot;
else if(lot>minlot && lot<maxlot)
{
int k=int((lot-minlot)/steplot);
lot=NormalizeDouble(minlot+k*steplot,2);
}
return(lot);
}
void Tralling_Stop(string Smv, int _Magic, double _Tral, double _Step, bool _Step_Use)
{
int Dig=int(MarketInfo(_Symbol,MODE_DIGITS));
for(int pos=OrdersTotal()-1; pos>=0;pos--)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Smv &&
OrderMagicNumber()==_Magic && OrderType()<2)
{
double SLPrice;
if(OrderType()==OP_BUY)
{
if(_Step_Use)
{
RefreshRates();
if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral+_Step,Dig))
{
SLPrice=NormalizeDouble(Ask-_Tral,Dig);
if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
Alert("Error modifi Order!: ",GetLastError());
}
}
else
{
RefreshRates();
if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral,Dig))
{
SLPrice=NormalizeDouble(Bid+_Tral,Dig);
if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
Alert("Error modifi Order!: ",GetLastError());
}
}
}
}
}
}
Söyle bana: siparişler her gün açılmıyor, takip çalışmıyor ve açık siparişler TP'ye göre kapatılmıyor. Neyi yanlış yaptım?
input int StartHour = 23; // Время ачало торговли
input int TakeProfit = 40; // TakeProfit
input int StopLoss = 40; // StopLoss
input int Lots = 0.1; // Лот для торговли
input int Magic = 22; // Магическое число
input int Trals = 20; // Дистанция тралинга в пунктах
input int _Step = 1; // Шаг
input bool _StepUse = true; // Использовать шаг или нет
void OnTick()
{
......
IsFirstTick = yanlış;
değiştireceğim parça bu
burada TM değişkeni, OnTick() işlevinin dışında DateTime olarak bildirilir, yani bu modül için globaldir.
Bu kod net değil: if(Open[0] < Open[StartHour])
Başlangıç Saatiniz 23'e eşittir ve sıfır çubuğunun açılış fiyatını 23. çubuğun geri açılış fiyatı ile karşılaştırdığınız ortaya çıktı. Pekala, tamam, belki bu danışmanın böyle bir özelliğidir.
Ama bu tasarım hiç çalışmıyor.
Ve bilet değişkeniniz sıfıra eşitse veya danışman yeniden başlatıldıysa ve bu değişken varsayılan olarak sıfırlandıysa?
StartHour, EA'nın çalışması gereken zamandır. Orada gece yarısı olmalı. Trolleme neden çalışmıyor?
Neden çalışmadığını anlamak için kodu analiz etmek gerekir.
Yazdır (" Tralling_Stop ") işlevini Tralling_Stop () işlevine eklemeyi deneyin ve bu mesajın (Tralling_Stop) günlükte olup olmadığına bakın, yoksa bu işlev çağrılmaz. Öyleyse, Tralling_Stop() işlevinin kendisini analiz edin, belki içinde bazı mantıksal hatalar vardır.
Genel olarak, nerede mantıksal if koşulları varsa, Yazdır(" koşul 1" çalıştı), Yazdır(" koşul 2" çalıştı), vb. Test cihazında Expert Advisor'ı çalıştırdığınızda, Expert Advisor'ın mantığını günlükte takip edebileceksiniz.
Neden çalışmadığını anlamak için kodu analiz etmek gerekir.
Yazdır (" Tralling_Stop ") işlevini Tralling_Stop () işlevine eklemeyi deneyin ve bu mesajın (Tralling_Stop) günlükte olup olmadığına bakın, yoksa bu işlev çağrılmaz. Öyleyse, Tralling_Stop() işlevinin kendisini analiz edin, belki içinde bazı mantıksal hatalar vardır.
Genel olarak, nerede mantıksal if koşulları varsa, Yazdır(" koşul 1" çalıştı), Yazdır(" koşul 2" çalıştı), vb. Test cihazında Expert Advisor'ı çalıştırdığınızda, Expert Advisor'ın mantığını günlükte takip edebileceksiniz.
Yeniden yazmaya çalıştım ama yine de istediğim gibi çalışmıyor. Gerektiğinde ya emirler açılmıyor ya da trol yapmıyor. Fikire göre, danışman şöyle çalışmalıdır: Günün son mumunun kapanışında (bu saat 00:00'da), Yüksek (alış için) ve Düşük için iki gecikme açmalıdır. (bir köy için) ve sonra onları trolleyin. bir gün sonra her şey tekrar eder.
input int StartHour = 1; // Начало торговли
input int TakeProfit = 40; // TakeProfit
input int StopLoss = 10; // StopLoss
extern double Lots = 0.1; // Лот для торговли
input int Magic = 22; // Магическое число
input int Trals = 5; // Дистанция тралинга в пунктах
input int _Step = 1; // Шаг
input bool _StepUse = false; // Использовать шаг или неT
void OnTick()
{
static bool IsFirstTick = false;
Trailing();
if (StartHour != Hour()) { return;}
if (OrdersTotal()>0)
{
OrderSend(Symbol(), OP_BUYLIMIT, Lots, High[1],10, Low[1]-StopLoss*Point, High[1]+TakeProfit*Point,"Set bu ForexRobot",Magic);
OrderSend(Symbol(), OP_SELLLIMIT, Lots, Low[1],10, High[1]+StopLoss*Point, Low[1]+TakeProfit*Point,"Set bu ForexRobot",Magic);
}
}
//+------------------------------------------------------------------+
void Trailing()
{
if (_StepUse)
{
for (int trall=0; trall<OrdersTotal(); trall++) {
if (!(OrderSelect(trall, SELECT_BY_POS, MODE_TRADES))) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() == OP_BUY ) {
if (Bid-OrderOpenPrice() > StopLoss*Point || OrderMagicNumber()==Magic) {
if (OrderStopLoss() < Bid-(StopLoss+_Step-1)*Point || OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-StopLoss*Point, OrderTakeProfit(), 0, Blue);
}
}
}
if (OrderType() == OP_SELL) {
if (OrderOpenPrice()-Ask > StopLoss*Point || OrderMagicNumber()==Magic) {
if (OrderStopLoss() > Ask+(StopLoss+_Step-1)*Point || OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+StopLoss*Point, OrderTakeProfit(), 0, Blue);
}
}
}
}
}
}
//+------------------------------------------------------------------+
Denemek
İle ikame edilmiş:
ile ikame edilmiş:
Ayrıca , NormalizeDouble() işlevi kullanılarak fiyatlar normalleştirilmelidir. Yani Low[1]-StopLoss*Point yerine NormalizeDouble(Low[1]-StopLoss*Point,Digits()) yazmalısınız.
Ayrıca, kodunuza bakılırsa, _StepUse değişkeni yanlışsa, sondaki durdurma sizin için çalışmayacaktır. Trailing() fonksiyon koduna yakından bakın
Denemek
İle ikame edilmiş:
ile ikame edilmiş:
Ayrıca , NormalizeDouble() işlevi kullanılarak fiyatlar normalleştirilmelidir. Yani Low[1]-StopLoss*Point yerine NormalizeDouble(Low[1]-StopLoss*Point,Digits()) yazmalısınız.
Ayrıca, kodunuza bakılırsa, _StepUse değişkeni yanlışsa, sondaki durdurma sizin için çalışmayacaktır. Trailing() fonksiyon koduna yakından bakın
iletişim halinde misiniz? Bana yaz http://vk.com/computerwizard116. Artık danışmanın sorununu nasıl çözeceğimi bilmiyorum. Bir demo hesapta bu stratejiyle bir hafta çalıştım
ve çalışıyor. Ve test ederken, bu piç siparişleri bile kapatmıyor ((((((((((((((((((((((((((((((((((((((((((((((((((((
Bunu neden yapıyor?
iletişim halinde misiniz? Bana yaz http://vk.com/computerwizard116. Artık danışmanın sorununu nasıl çözeceğimi bilmiyorum. Bir demo hesapta bu stratejiyle bir hafta çalıştım
ve çalışıyor. Ve test ederken, bu piç siparişleri bile kapatmıyor ((((((((((((((((((((((((((((((((((((((((((((((((((((
Bunu neden yapıyor?
Vkontakte'm yok.
Kâr al ve zararı durdur emirlerinin yürütülmesi danışmana bağlı değildir, komisyoncu sunucusunda yürütülür. EA yalnızca alma ve durdurmayı ayarlar, ancak bunları yürütmez. Fiyat bu değere ulaştıktan sonra kâr al ayarının yapılıp yapılmadığını kontrol edin. Yani, önce bir emir açıldı, ardından fiyat ileri geri yürüdü ve ardından bir kâr al belirlendi.
Vkontakte'm yok.
Kâr al ve zararı durdur emirlerinin yürütülmesi danışmana bağlı değildir, komisyoncu sunucusunda yürütülür. EA yalnızca alma ve durdurmayı ayarlar, ancak bunları yürütmez. Fiyat bu değere ulaştıktan sonra kâr al ayarının yapılıp yapılmadığını kontrol edin. Yani, önce bir emir açıldı, ardından fiyat ileri geri yürüdü ve ardından bir kâr al belirlendi.