Bu kadar çirkin bir şekilde pişmanım - kod çalışmadığı için hafızadan yazmak zorunda kaldım ve sildim. Ama siz bir profesyonel olarak açık olmalısınız (umarım).
Beni pohpohluyorsun :)) Bende senin gibi acemiyim...
extremumprice.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------------externint Quant_Bars = 30 ; // Количество баровbool OpnBuy = false ,
OpnSell = false ;
//--------------------------------------------------------------------int start() // Спец. функция start
{
int i; // Номер бара double Minimum=Bid, // Минимальная цена
Maximum=Bid; // Максимальная ценаfor (i= 0 ;i<=Quant_Bars- 1 ;i++) // От нуля (!) до..
{ // ..Quant_Bars-1 (!)if (Low[i]< Minimum) // Если < известного
Minimum=Low[i]; // то оно и будет минif (High[i]> Maximum) // Если > известного
Maximum=High[i]; // то оно и будет макс
}
//--------------------------------------------------------------------if (iOpen(NULL, 0 , 1 )>Maximum)
{
OpnBuy = true :
OpnSell= false ;
}
if (iOpen(NULL, 0 , 1 )<Minimum)
{
OpnSell= true ;
OpnBuy = false :
}
//-------------------------------------------------------------------// А тут код открытия позиций. if (OpnBuy) {открываем Бай};// if (OpnSell) {открываем Селл};// Но обязательно нужно сделать проверку на существование уже открытой позиции,// иначе они будут открываться на каждом тике пока присутствует сигнал...return ; // Выход из start()
}
//--------------------------------------------------------------------
Böyle bir yerde. Kontrol etmedim, bu yüzden buldozerden dizimin üzerine yazdım ...
1. Magic ile bekleyen bir emir verin, diyelim ki 101 ve emri pozisyona dönüştürmek için bayrağı sıfırlayın, diyelim ki ConvOrd=false;
2. magic 101 ile bir pozisyon olup olmadığını kontrol edin, eğer öyleyse, ConvOrd=true dönüşüm bayrağını ayarlayın;
3. ConvOrd'un doğru olup olmadığını ve ConvOrd==true olup olmadığını kontrol edin, magic 101 ile bir pozisyonun varlığını kontrol edin ve mevcut değilse - zaten kapalı demektir.
{ConvOrd=false bayrağını sıfırlayın; yeni bir ertelenmiş ayarla;}
Bence bayraksız da yapabilirsiniz...
Mantık benim için açık, ancak bunu kodda nasıl uygulayacağımı bilmiyorum. Birçok seçeneği denedim ama başarılı olamadım. Bence çaydanlık. Bu yüzden buraya yazdım. 663. sayfada kodumu gösterdim. Bir arzu varsa - bitirin ya da en azından bana daha spesifik olarak nasıl bitireceğimi söyleyin. Teşekkür ederim.
artmedia70 , Roger yardım için teşekkürler. Sanırım anladım, aslında 0. çubuktaki fiyat minimum ve maksimumdan daha düşük ve daha yüksek olamaz, bunu düşünmedim ve Min değişkeninin değeri olarak Ask ekledim, şimdi çalışıyor gibi görünüyor. artmedia70 , bana kıyasla, profesyonellerin çoğu))). Tekrar teşekkürler.
dimon74 : Mantık benim için açık, ancak bunu kodda nasıl uygulayacağımı bilmiyorum. Birçok seçeneği denedim ama başarılı olamadım. Bence çaydanlık. Bu yüzden buraya yazdım. 663. sayfada kodumu gösterdim. Bir arzu varsa - bitirin ya da en azından bana daha spesifik olarak nasıl bitireceğimi söyleyin. Teşekkür ederim.
SellStop siparişi verirken daha basit deneyin, TakeProfit değerini unutmayın ve Teklif bu fiyatın altına düşerse Satın Al'a yerleştirin.
Neden aynı anda iki kilitleme konumu ayarlandığını bile anlamıyorum. Mantık şu:
Öz sermaye önceki değerinden belirli bir kâr oranına ulaştığında tüm pozisyonları kapatıyoruz... Olması gerektiği gibi çalışıyor... Devamı...
Hisse senedi önceki değerinin belirli bir yüzdesi kadar düştüğünde, en büyük zararı olan pozisyonu ararız, kim olduğunu belirleriz ... işte Al veya Sat.
ve ikiye katlanmış bir parti ile ters yönde bir kilitleme pozisyonu açın. Ardından, toplam kârlarına (zarar ve kilitleme) bakarız ve büyür büyümez,
peki 10 puan diyelim kapat nafig...
İşin mantığına göre bir sonraki tikte önce eşitlik kontrol edilmeli ve orada her şey yolundaysa çalışmaya devam ediyoruz efendim... Yine her şey kötüyse sıradaki geyiği arıyoruz. ..
Ama nedense benim için aynı anda iki kilitli olanı açıyor ... hem Al hem Sat, üstelik lot 0.1 ise, o zaman ilk kilitleme çift lot ile açılıyor = 0.2,
ikincisi ise tekrar ikiye katlıyor ve şimdiden çok fazla 0.4 ile açılıyor... Buna göre, burada kilit nedir, eğer şimdi Güneşin altında bir yer için birbirleriyle savaşıyorlarsa... :(
Kodu ekliyorum, belki biri beni parmağımla dürter.
//----------------- Закрытие позиций если эквити выросло на N процентов ---------------------------if (Equ_NEW>=Equ_OLD+EquPerc) // Новое эквити больше старого на процент прибыли..
{
// ClosePosBySizeLossInCurrency(NULL, -1, -1, 0); // Закрытие всех убыточных позиций
ClosePosFirstProfit( NULL , - 1 , - 1 ); // Закрываем все позиции, сначала прибыльные
DeleteOrders( NULL , - 1 , - 1 ); // Удаляем ордера
Equ_NEW=AccountEquity(); // Запоминаем новое значение эквити
Equ_OLD=Equ_NEW; // и вписываем его в "старое"
CountClsEQU++; // Увеличиваем счётчик кол-ва закрытий для ф-ции вывода информации
LockBuy51 =true; // Разрешаем открытие локирующих
LockSell51=true; // позиций Buy и Sell
OpnBuy51 =true; // и вообще разрешаем открываться
OpnSell51 =true; // в любую сторону...
}
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------if (Equ_NEW<=Equ_OLD-EquPerc/ 2 ) // Новое эквити меньше старого на столько-то процентов...
{
Trade=false; // Запрещаем торговлю//-------------- Закрытие двух позиций, если ранее был установлен лок на убыточную ------------- if ( OrderSelect (TicketLoss, SELECT_BY_POS, MODE_TRADES)) // Выбираем убыточную позицию (если её тикет
{ // ранее был сохранён в TicketLoss)double prloss=OrderProfit()+OrderSwap(); // Размер профита убыточной позицииint typeloss =OrderType(); // Тип убыточной позицииint mnloss =OrderMagicNumber(); // Magic убыточной позиции
}
if ( OrderSelect (TicketLock, SELECT_BY_POS, MODE_TRADES)) // Выбираем локирующую позицию (если её тикет
{ // ранее был сохранён в TicketLock)double prlock=OrderProfit()+OrderSwap(); // Размер профита локирующей позицииint typelock =OrderType(); // Тип локирующей позиции
}
if (prloss+prlock>= 10 * Point ) // Если их суммарный профит больше 10 пунктов
{
ClosePositions( NULL , typelock, 5100 ); // Закрываем локирующую позицию
ClosePositions( NULL , typeloss, mnloss); // Закрываем убыточную позицию
}
//--------------- Поиск убыточной позиции и установка локирующей ------------------------- double Loss= 0 ; // Последнее значение убыткаint i, k= OrdersTotal (), OrdTicket=- 1 ;
for (i=k- 1 ; i>= 0 ; i--) { // Цикл по всем ордерам терминалаif ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderProfit()+OrderSwap()< 0 )) { // Если профит позиции меньше 0if (Loss>OrderProfit()+OrderSwap()) { // Если последнее значение убытка больше убытка позиции
Loss=OrderProfit()+OrderSwap(); // Значит тут убыток больше, запоминаем как последнее
OrdTicket=i; // Запоминаем номер убыточной позиции
}
}
}
}
if (OrdTicket>= 0 ) {
if ( OrderSelect (OrdTicket, SELECT_BY_POS, MODE_TRADES)) { // Выбираем позицию по тикету
TicketLoss=OrdTicket; // Запоминаем как тикет убыточной позыif (OrderType()==OP_BUY) // Если её тип Бай
{
Magic= 5100 ; // Задаём магик...
New_Comm= "Sell_M5_Стратегия_1_Локирующая позиция" ; // Задаём комментарий для позиции
Lots_New=NormalizeLot(OrderLots()* 2 , False, NULL ); // Увеличим лот в два разаif (!ExistPositions( NULL , OP_SELL, 5100 , 0 )){ // Если нет локирующего Sell
OpenPosition( NULL ,OP_SELL,Lots_New, 0 ,pb-tp* 100 *po,Magic,New_Comm);} // Открываем локирующий...if (ExistPositions( NULL , OP_SELL, 5100 , 0 )) // Проверяем, заодно и выбираем её
{TicketLock=OrderTicket();} // Сохраняем тикет локирующего Sell
}
if (OrderType()==OP_SELL)
{
Magic= 5100 ; // Задаём магик...
New_Comm= "Buy_M5_Стратегия_1_Локирующая позиция" ; // Задаём комментарий для позиции
Lots_New=NormalizeLot(OrderLots()* 2 , False, NULL ); // Увеличим лот в два разаif (!ExistPositions( NULL , OP_BUY, 5100 , 0 )){ // Если нет локирующего Buy
OpenPosition( NULL ,OP_BUY,Lots_New, 0 ,pa+tp* 100 *po,Magic,New_Comm);} // Открываем локирующий...if (ExistPositions( NULL , OP_BUY, 5100 , 0 )) // Проверяем, заодно и выбираем её
{TicketLock=OrderTicket();} // Сохраняем тикет локирующего Buy
}
}
}
}
İle başlayan
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
Sıfır çubuğundan değil, ilkinden itibaren en yüksekleri ve en düşükleri sayın, sıfır çubuğunda Teklif Min'den az olamaz.
çift
Min=Teklif, değişken bildirimi
maks=teklif,
___________________________________________________________________________________________
(i=0;i<=20-1;i++) açılış kriterleri için
{if (Düşük[i]<Min) Min=Düşük[i]:
if (Yüksek[i]>Maks) Maks=Yüksek[i];
}
if (.................&&Sor>Maks)
{
Opn_B=doğru; // Satın Al'ı aç
}
if (................&&Teklif<Min)
{
Opn_S=doğru; // Satışı aç
}
__________________________________________________________________________________________
Bu kadar çirkin bir şekilde pişmanım - kod çalışmadığı için hafızadan yazmak zorunda kaldım ve sildim. Ama siz bir profesyonel olarak açık olmalısınız (umarım).
___________________________________________________________________________________________
Beni pohpohluyorsun :)) Bende senin gibi acemiyim...
Böyle bir yerde. Kontrol etmedim, bu yüzden buldozerden dizimin üzerine yazdım ...Pekala, işte mantık:
1. Magic ile bekleyen bir emir verin, diyelim ki 101 ve emri pozisyona dönüştürmek için bayrağı sıfırlayın, diyelim ki ConvOrd=false;
2. magic 101 ile bir pozisyon olup olmadığını kontrol edin, eğer öyleyse, ConvOrd=true dönüşüm bayrağını ayarlayın;
3. ConvOrd'un doğru olup olmadığını ve ConvOrd==true olup olmadığını kontrol edin,
magic 101 ile bir pozisyonun varlığını kontrol edin ve mevcut değilse -
zaten kapalı demektir.
{ConvOrd=false bayrağını sıfırlayın; yeni bir ertelenmiş ayarla;}
Bence bayraksız da yapabilirsiniz...
Mantık benim için açık, ancak bunu kodda nasıl uygulayacağımı bilmiyorum. Birçok seçeneği denedim ama başarılı olamadım. Bence çaydanlık. Bu yüzden buraya yazdım. 663. sayfada kodumu gösterdim. Bir arzu varsa - bitirin ya da en azından bana daha spesifik olarak nasıl bitireceğimi söyleyin. Teşekkür ederim.
SellStop siparişi verirken daha basit deneyin, TakeProfit değerini unutmayın ve Teklif bu fiyatın altına düşerse Satın Al'a yerleştirin.
SellStop siparişi verirken daha basit deneyin, TakeProfit değerini unutmayın ve Teklif bu fiyatın altına düşerse Satın Al'a yerleştirin.
Tavsiye için teşekkürler! Bu seçeneği zaten denedim, ancak stratejimi uygulamak için uygun değil.
Neden aynı anda iki kilitleme konumu ayarlandığını bile anlamıyorum. Mantık şu:
Öz sermaye önceki değerinden belirli bir kâr oranına ulaştığında tüm pozisyonları kapatıyoruz... Olması gerektiği gibi çalışıyor... Devamı...
Hisse senedi önceki değerinin belirli bir yüzdesi kadar düştüğünde, en büyük zararı olan pozisyonu ararız, kim olduğunu belirleriz ... işte Al veya Sat.
ve ikiye katlanmış bir parti ile ters yönde bir kilitleme pozisyonu açın. Ardından, toplam kârlarına (zarar ve kilitleme) bakarız ve büyür büyümez,
peki 10 puan diyelim kapat nafig...
İşin mantığına göre bir sonraki tikte önce eşitlik kontrol edilmeli ve orada her şey yolundaysa çalışmaya devam ediyoruz efendim... Yine her şey kötüyse sıradaki geyiği arıyoruz. ..
Ama nedense benim için aynı anda iki kilitli olanı açıyor ... hem Al hem Sat, üstelik lot 0.1 ise, o zaman ilk kilitleme çift lot ile açılıyor = 0.2,
ikincisi ise tekrar ikiye katlıyor ve şimdiden çok fazla 0.4 ile açılıyor... Buna göre, burada kilit nedir, eğer şimdi Güneşin altında bir yer için birbirleriyle savaşıyorlarsa... :(
Kodu ekliyorum, belki biri beni parmağımla dürter.
İle başlayan
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------bir yerlerde söve yaşıyor ...
SAYFA NUMARASI " 666 " :-)