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

 
A13ksandr : Üzgünüm! Tabii ki, void OnTick() içindeki her şey olur. açıklanan)
O zaman hata kodu test cihazının günlüğünde yatıyor, bunu daha iyi anlayabilirsiniz.
 
evillive :
O zaman hata kodu test cihazının günlüğünde yatıyor, bunu daha iyi anlayabilirsiniz.

Hata yok. Sadece prosedüre giderken kilitleniyor. Bir de StartSell var, normalde ona giriyor. Bir çeşit çamur.

Güncellenmiş alıntılar - çalışmaya başladı. Delikler nedeniyle yanlış, ama en azından donmuyor.

 

Selamlar! Söyle bana, lütfen, ikili opsiyonlarda farklı enstrümanlar için (bot aynı anda çeşitli enstrümanların birkaç tablosuna eklenir) seri sayısının ayarlanan değerinden daha fazlasının aynı anda açılmasına yönelik bir yasağı en iyi nasıl reçete edebilirim?

dış çift Lot = 1; // Çok güzelsin

harici intExp = 1; // Son

harici int Bekle = 0; // Bir yöndeki mum sayısı

extern int Zaman Aşımı = 1; // Zaman aralığı

dış çift Çarpan = 3; // Çarpan

dış int kayma = 5; // kayma

extern int MaxOpenOrders = 1; // Maksimum eşzamanlı açık sipariş sayısı

harici int Sihir = 774274; // Büyü


int bilet, Tür;

çift fiyat, çok;

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

//| 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()

{

// --------------- İşlemlerin açılması ---------------

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

{

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ç

{

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 (SignalBuy() && MaxOpenOrders > OrdersTotal())

{

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

}

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

{

bilet = OrderSend(Symbol(), 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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++;

}

}

dönüş(cnt);

}

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

bool SignalBuy()

{

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

{

if (Close[i] > Open[i]) return(false);

}

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

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

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

dönüş(yanlış);

}

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

bool SignalSell()

{

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

{

if (Kapat[i] < Aç[i]) dönüş(yanlış);

}

if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Bekle || (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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

{

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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

fiyat = OrderOpenPrice();

}

}

}

}

iade(fiyat);

}

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

 
alvlaf :

CountTrades işlevinden OrderSymbol() == Symbol() koşulunu kaldırmanız ve OrderType() == OP_BUY || OrderType() == OP_SEL, değil mi?

Ve OnTick'te, OrderSend'den önce, if (SignalBuy() && CountTrades() < MaxOpenOrders ) koşulunu değiştirin... Ve benzer şekilde satış için.
 
A13ksandr :
Teşekkürler, denedim - bot her tikte bir sürü sipariş açmaya başladı.
 
A13ksandr :

if (OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL))

Doğru mu değiştirdim?

 
alvlaf :

Selamlar! Söyle bana, lütfen, ikili opsiyonlarda farklı enstrümanlar için (bot aynı anda çeşitli enstrümanların birkaç tablosuna eklenir) seri sayısının ayarlanan değerinden daha fazlasının aynı anda açılmasına yönelik bir yasağı en iyi nasıl reçete edebilirim?

dış çift Lot = 1; // Çok güzelsin

harici intExp = 1; // Son

harici int Bekle = 0; // Bir yöndeki mum sayısı

extern int Zaman Aşımı = 1; // Zaman aralığı

dış çift Çarpan = 3; // Çarpan

dış int kayma = 5; // kayma

extern int MaxOpenOrders = 1; // Maksimum eşzamanlı açık sipariş sayısı

harici int Sihir = 774274; // Büyü


int bilet, Tür;

çift fiyat, çok;

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

//| 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()

{

// --------------- İşlemlerin açılması ---------------

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

{

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ç

{

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 (SignalBuy() && MaxOpenOrders > OrdersTotal())

{

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

}

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

{

bilet = OrderSend(Symbol(), 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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++;

}

}

dönüş(cnt);

}

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

bool SignalBuy()

{

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

{

if (Close[i] > Open[i]) return(false);

}

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

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

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

dönüş(yanlış);

}

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

bool SignalSell()

{

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

{

if (Kapat[i] < Aç[i]) dönüş(yanlış);

}

if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Bekle || (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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

{

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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && 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 (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

fiyat = OrderOpenPrice();

}

}

}

}

iade(fiyat);

}

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

Lütfen söyleyin, MagicNumber'ı ne amaçla kullanıyorsunuz, bu stratejide ne veriyor? IMHO , burada OnInit OnDeinit işlevlerini atmak da mümkündür
 
evillive :


Zaman, tarih-saat biçiminde hemen ayarlanabilir, dönüştürme için makine zamanını boşa harcamanıza gerek yoktur, bu şekilde çalışır:

harici tarihsaat Başlangıç Saati = D'07:00' ;

Bu zaman formatında danışmana başlarken danışmanın derleme tarihini alıyoruz ama bugün istiyoruz.

Nasıl düzeltilir?

 
RichLux :

Bu zaman formatında danışmana başlarken danışmanın derleme tarihini alıyoruz ama bugün istiyoruz.

Nasıl düzeltilir?

Başlatmada, parametreyi diğer kullanıcı parametreleriyle aynı şekilde istediğiniz şekilde değiştirin.

Ve nedense bana senaryonun başlatıldığı andaki mevcut tarihi gösteriyor.

 
LRA :
Lütfen söyleyin bana, MagicNumber'ı ne amaçla kullanıyorsunuz, bu stratejide ne veriyor? IMHO , burada OnInit OnDeinit işlevlerini atmak da mümkündür
"Bu stratejide" kelimelerinin amacı nedir? Hesap üzerinde manuel olarak işlemler yapılıyorsa veya başka bir Uzman Danışman çalışıyorsa bu emirlere dokunulmaması için sihir gerekir. Bence de.