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

 
amsgif80 # :

Girmeye çalıştığım kod bu:

bunu kodun en üstüne koy:
numaralandırma ENUM_DIRECTION{
DIRECTION_BUY = 0, // sadece satın al
DIRECTION_SELL = 1, // sadece sat
DIRECTION_ANY = 2, // al ve sat
};

ENUM_DIRECTION girişi inp_direction = DIRECTION_ANY; // izin verilen ticaret yönü


sonra kodda satın almanın nerede açıldığını ve satışın nerede açıldığını bulun. start() veya OnTick() işlevinin içinde aranmalıdır
koşullarda satın nerede ekleyin:
if(inp_direction!=DIRECTION_SELL)
satış nerede, koşullara ekleyin:
if(inp_direction!=DIRECTION_BUY)

Ve nereye yerleştirdin?
 
MakarFX # :
Ve nereye yerleştirdin?
//+------------------------------------------- --------------------+
//| Hareketli Ortalamalar.mq5 |
//| Telif Hakkı 2009-2013, MetaQuotes Yazılım A.Ş. |
//+------------------------------------------- --------------------+





#property telif hakkı "Telif hakkı 2009-2013, MetaQuotes Software Corp."
#özellik bağlantısı " https://www.mql5.com "
#özellik sürümü "1.00"

numaralandırma ENUM_DIRECTION{
DIRECTION_BUY = 0, // sadece satın al
DIRECTION_SELL = 1, // sadece sat
DIRECTION_ANY = 2, // al ve sat
};

ENUM_DIRECTION girişi inp_direction = DIRECTION_ANY; // izin verilen ticaret yönü

#include <Ticaret\Ticaret.mqh>

giriş çift MaximumRisk = 0.02; // Maksimum Risk yüzdesi
giriş double DecreaseFactor = 3; // Faktörü azalt
input int MovingPeriod = 12; // Hareketli Ortalama süre
input int MovingShift = 6; // Hareketli Ortalama kayması



//---
intExtHandle=0;


//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+




int OnInit(void)
{
//---
ExtHandle=iMA(_Symbol,_Period,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE);
if(ExtHandle==INVALID_HANDLE)
{
printf("MA göstergesi oluşturma hatası");
dönüş(INIT_FAILED);
}
//---
dönüş(INIT_SUCCESSED);
}
//+------------------------------------------- --------------------+
//| Uzman onay işlevi |
//+------------------------------------------- --------------------+
geçersiz OnTick(void)
{
//---
if(PositionSelect(_Symbol))
CheckForClose();
başka
CheckForOpen();
//---
}
//+------------------------------------------- --------------------+
//| Uzman başlatmasızlaştırma işlevi |
//+------------------------------------------- --------------------+
geçersiz OnDeinit(const int nedeni)
{
}
//+------------------------------------------- --------------------+


//+------------------------------------------- --------------------+
//| Optimum parti boyutunu hesaplayın |
//+------------------------------------------- --------------------+
double TradeSizeOptimized(void)
{
çift fiyat=0.0;
çift kenar boşluğu=0.0;
//--- parti büyüklüğünü hesapla
if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,fiyat))
dönüş(0.0);
if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,fiyat,marj))
dönüş(0.0);
if(marj<=0.0)
dönüş(0.0);

double lot=NormalizeÇift(HesapBilgisiÇift(HESAP_ÜCRETSİZMARGIN)*MaksimumRisk/marj,2);
//--- sürekli kaybedilen bir dizi işlemin uzunluğunu hesaplayın
if(DecreaseFactor>0)
{
//--- tüm işlem geçmişini isteyin
HistorySelect(0,TimeCurrent());
//--
int siparişler=HistoryDealsTotal(); // toplam anlaşma sayısı
int kayıplar=0; // seride kaybedilen işlem sayısı

for(int i=sipariş-1;i>=0;i--)
{
ulong bilet=HistoryDealGetTicket(i);
if(bilet==0)
{
Print("HistoryDealGetTicket başarısız oldu, işlem geçmişi yok");
kırmak;
}
//--- anlaşma sembolünün kontrol edilmesi
if(HistoryDealGetString(bilet,DEAL_SYMBOL)!=_Symbol)
devam etmek;
//--- kar kontrolü
çift kar=HistoryDealGetDouble(bilet,DEAL_PROFIT);
if(kâr>0.0)
kırmak;
if(kâr<0.0)
kayıp++;
}
//---
if(kayıplar>1)
lot=NormalizeÇift(lot-lot*kayıplar/AzalışFaktörü,1);
}
//--- kabul edilebilir işlem hacmi değerlerinin normalleştirilmesi ve kontrolü
double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
lot=stepvol*NormalizeDouble(lot/stepvol,0);

double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(lot<minvol)
lot=minvol;

double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
if(lot>maxvol)
lot=maksvol;
//--- işlem hacminin değerini döndür
dönüş(lot);
}


//+------------------------------------------- --------------------+
//| Açık pozisyon koşullarını kontrol edin |
//+------------------------------------------- --------------------+
geçersiz CheckForOpen(void)
{
MqlRates rt[2];
//--- fiyat değerlerini kopyala
if(CopyRates(_Symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates ",_Symbol," başarısız, geçmiş yok");
dönüş;
}
//--- sadece yeni bir çubuğun ilk işaretiyle işlem yap
if(rt[1].tick_volume>1)
dönüş;
//--- Hareketli Ortalama göstergesinin mevcut değerini alın
dublema[1];
if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("iMA'dan CopyBuffer başarısız oldu, veri yok");
dönüş;
}
//--- sinyalleri kontrol etme
ENUM_ORDER_TYPE sinyali=WRONG_VALUE;

if(rt[0].open>ma[0] && rt[0].kapat<ma[0])
sinyal=ORDER_TYPE_SELL; // satış koşulu if(inp_direction!=DIRECTION_BUY)
başka
{
if(rt[0].open<ma[0] && rt[0].kapat>ma[0])
sinyal=ORDER_TYPE_BUY; // satın alma koşulu if(inp_direction!=DIRECTION_SELL)
}
//--- ek kontroller
if(sinyal!=WRONG_VALUE)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Bars(_Symbol,_Period)>100)
{
CTrade ticareti;
trade.PositionOpen(_Symbol,sinyal,TradeSizeOptimized(),
SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SEL ? SYMBOL_BID:SYMBOL_ASK),
0.0);
}
//---
}
//+------------------------------------------- --------------------+
//| Yakın konum koşullarını kontrol edin |
//+------------------------------------------- --------------------+
void CheckForClose(void)
{
MqlRates rt[2];
//--- fiyat değerlerini kopyala
if(CopyRates(_Symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates ",_Symbol," başarısız, geçmiş yok");
dönüş;
}
//--- sadece yeni bir çubuğun ilk işaretiyle işlem yap
if(rt[1].tick_volume>1)
dönüş;
//--- Hareketli Ortalama göstergesinin mevcut değerini alın
dublema[1];
if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("iMA'dan CopyBuffer başarısız oldu, veri yok");
dönüş;
}
//--- PositionSelect() ile daha önce seçilen pozisyonun tipini alın
bool sinyali=yanlış;
uzun tip=PositionGetInteger(POSITION_TYPE);

if(type==(uzun)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].kapat<ma[0])
sinyal=doğru;
if(type==(long)POSITION_TYPE_SELL && rt[0].open<ma[0] && rt[0].kapat>ma[0])
sinyal=doğru;
//--- ek kontroller
if(sinyal)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Bars(_Symbol,_Period)>100)
{
CTrade ticareti;
trade.PositionClose(_Symbol,3);
}
//---
}
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 

Bu bölüm şöyle görünmelidir

 //--- проверка сигналов
   ENUM_ORDER_TYPE signal= WRONG_VALUE ;

   if (rt[ 0 ].open>ma[ 0 ] && rt[ 0 ].close<ma[ 0 ])
     {
       if (inp_direction!=DIRECTION_BUY)
         signal= ORDER_TYPE_SELL ;
     }
   else
     {
       if (rt[ 0 ].open<ma[ 0 ] && rt[ 0 ].close>ma[ 0 ])
        {
         if (inp_direction!=DIRECTION_SELL)
            signal= ORDER_TYPE_BUY ;
        }
     }
 //--- дополнительные проверки 
 
MakarFX # :

Bu bölüm şöyle görünmelidir

Makar, işte burada

       if (inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY)

bunu değiştirmek daha iyi

       if (inp_direction!=DIRECTION_BUY)
 
Alexey Viktorov # :

Makar, işte burada

bunu değiştirmek daha iyi

değiştirildi)
 
MakarFX # :

Bu bölüm şöyle görünmelidir

Kalbimin derinliklerinden teşekkür ederim! Her şey hemen yoluna girdi. Nasıl yapacağım konusunda kafamı çoktan kırdım))

 
Ve aynı soruyla tekrar size dönebilir miyim, sadece editörde oluşturulan kendi basit danışmanım için? Şimdi son örneği kendim halledebileceğimi düşündüm, ama orada değildi. Bu Al/Sat kodunu nereye ekleyeceğimi bulamıyorum.
 
amsgif80 # :
Ve aynı soruyla tekrar size dönebilir miyim, sadece editörde oluşturulan kendi basit danışmanım için? Şimdi son örneği kendim halledebileceğimi düşündüm, ama orada değildi. Bu Al/Sat kodunu nereye ekleyeceğimi bulamıyorum.
göstermek
 
amsgif80 # :

Kodu foruma nasıl gömeceğimi gösterdim


 
MakarFX # :

hiçbir şeyi değiştirmedin

itirazınız

içeride

Bahşiş için teşekkürler.