lütfen sorun için bana yardım edin, ikinci fiyat güncellemesinden sonra TP değişkenim sıfırlanıyor , yani danışman bir emir açıp TP ve Bid değerini veriyor, ikisi de sıfır değil, ardından fiyat tekrar güncelleniyor ve TP sıfır oluyor, kodda böyle bir komut olmamasına rağmen, SL'yi yukarı çekmekle ilgili bir sorunum vardı ve şimdi sorunun TP'yi belirlemede olduğu ortaya çıktı.
int başlangıç() { //---- çift TP; çift SL; if (Sipariş Toplamı()==0) { OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Teklif+4*Puan); OrderSelect(OrdersTotal()-1,SELECT_BY_POS); TP=OrderTakeProfit(); } Uyarı("TP="+TP); Alert("Teklif=" + Teklif); if (Sipariş Toplamı()>0) { if (TP-Teklif<3*Puan) { Uyarı ("TP'ye 1 veya 2 yaklaştı"); Uyarı("TP="+TP); Alert("Teklif=" + Teklif); } } //---- dönüş(0); }
lütfen sorun için bana yardım edin, ikinci fiyat güncellemesinden sonra TP değişkenim sıfırlanıyor, yani danışman bir emir açıp TP ve Bid değerini veriyor, ikisi de sıfır değil, ardından fiyat tekrar güncelleniyor ve TP sıfır oluyor, kodda böyle bir komut olmamasına rağmen, SL'yi yukarı çekmekle ilgili bir sorunum vardı ve şimdi sorunun TP'yi belirlemede olduğu ortaya çıktı.
double TP, SL;
int start() { //----
if (OrdersTotal()==0) { OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Bid+4*Point); OrderSelect(OrdersTotal()-1,SELECT_BY_POS); TP=OrderTakeProfit(); } Alert ("TP=" + TP); Alert ("Bid=" + Bid); if (OrdersTotal()>0) { if (TP-Bid<3*Point) { Alert ("Приблизился к ТП на 1 или 2"); Alert ("TP=" + TP); Alert ("Bid=" + Bid); } } //---- return(0); }
Strateji, iki sinyalin varlığını sağlar: ana ve ikincil. Anlaşma, ikinci sinyal en geç 12 saat sonra göründüğünde açılır. Soru: 12 saat sonra ortaya çıkarsa bir danışmana bir sinyale tepki vermemesi nasıl öğretilir? Lütfen, mümkünse, belirli bir kod örneği
Strateji, iki sinyalin varlığını sağlar: ana ve ikincil. Anlaşma, ikinci sinyal en geç 12 saat sonra göründüğünde açılır. Soru: 12 saat sonra ortaya çıkarsa bir danışmana bir sinyale tepki vermemesi nasıl öğretilir? Lütfen, mümkünse, belirli bir kod örneği
Merhaba Dmitry. Kendi adıma, size aşağıdaki seçeneği sunmaya hazırım. Bir benzetme için, bu makalenin alım satım kriterlerinin tetiklenmesine bakın - ayrıca iki sinyalde bir emrin tetiklenmesi var - yani, ikinci resimden sonra bakın "DeMarker grafiğinde beklemeniz gereken ilk şey, DeMarker'ın 0.7 alanındaki hızlı ve yavaş MA çizgilerini kısa bir pozisyon için geçer.Bu ilk ön sinyaldir.Daha sonra, gerçek MA çizgilerinin kendilerinin kesişmesini bekleriz.Bu sinyal ana sinyaldir, bundan sonra alınabilir Taichi göstergesinin okumaları gibi. MA çizgilerinin kesişimi gerçekleşmediyse, sinyalin yanlış olduğu ve fiyat hareketinin gelişiminin devam edeceği kabul edilir." İşte bunu kod biçiminde nasıl yaptım - ticaret kriterlerini tetiklemekten sorumlu olan baykuşların dahil edilmesinde.
Ana özellik, bir veya başka bir ticaret kriteri tetiklendiğinde bayrakları ayarlayarak ve temizleyerek aşağıdaki (sonda) iki dahil etme işlevi üzerinde çalışmamızdır.
//--------------------------------------------------------------------// Criterion.mqh// //--------------------------------------------------------------- 1 --// Функция вычисления торговых критериев.// Возвращаемые значения:// 10 - открытие Buy // 20 - открытие Sell // 0 - значимых критериев нет// //--------------------------------------------------------------- 2 --// Внешние переменные:externstring A5 = "Параметры" ;
//extern int Period_K = 5; // Период K//extern int Period_D = 3; // Период D//extern int Slowing = 3; // Замедлениеexternint Tenkan= 9 ;
externint Kijun= 26 ;
externint Senkou= 52 ;
externint FlatSE= 7 ;
extern int DeMarker=25;extern int FastMA=14;extern int SlowMA=25;extern double DeMarker_OpenLevel_Sell = 0.7;extern double DeMarker_OpenLevel_Buy = 0.7;
bool DeMarker_Buy_signal=false, DeMarker_Sell_signal=false,
MA_Buy_signal=false, MA_Sell_signal=false;
extern int t_trend_period =6; // для оптимизации по всем периодам от 0 до 7 шаг 1
// на каком ТФ работаем: 1-М1, 2-М5, 3-М15, 4-М30, 5-Н1, 6 - Н4, 7-день
//--------------------------------------------------------------- 3 --int Criterion() // Пользовательская функция
{
//--------------------------------------------------------------- 4 --
int trend_period=GetPeriod(t_trend_period); // для выбора оптимального значения рабочего ТФ
// Параметры технич. индикат:double Taichi_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" ,Tenkan, Kijun, Senkou, FlatSE, 0 , 1 );
double TaichiFor_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 3 , 1 );
double Signal_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 1 , 1 );
double SSignal_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 2 , 1 );
double FlatBuffer1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 4 , 1 );
double FlatBuffer2 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 5 , 1 );
double DeMarker_1 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" ,DeMarker, FastMA, SlowMA, 0 , 1 );
double DeMarker_2 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" ,DeMarker, FastMA, SlowMA, 0 , 2 );
double FastMA_1 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 1 , 1 );
double FastMA_2 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 1 , 2 );
double SlowMA_1 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 2 , 1 );
double SlowMA_2 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 2 , 2 );
//--------------------------------------------------------------- 5 --// Вычисление торговых критериевif (( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (DeMarker_Buy_signal == true && DeMarker_Sell_signal==false)) && // когда DeMarker пересекает медленую (выше уровня бай (0.7)) для лонг
( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (MA_Buy_signal==true && MA_Sell_signal==false)) && // пересечение МА DeMarkers
(iClose( Symbol (), trend_period, 1 ) > Taichi_1 && Taichi_1 > TaichiFor_1 && Signal_1 > SSignal_1 && FlatBuffer1== 0 && FlatBuffer2== 0 ))
{
Print ( "Taichi_1 = " , Taichi_1, "TaichiFor_1 = " ,TaichiFor_1, "Signal_1 = " , Signal_1, "SSignal_1 = " ,SSignal_1, "FlatBuffer1 = " , FlatBuffer1, "FlatBuffer2 = " , FlatBuffer2);
Print ( "DeMarker_1 = " , DeMarker_1, "DeMarker_2 = " ,DeMarker_2, "FastMA_1 = " , FastMA_1, "FastMA_2 = " ,FastMA_2, "SlowMA_1 = " , SlowMA_1, "SlowMA_2 = " , SlowMA_2);
return ( 10 ); // Открытие Buy
}
if (( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_SELL) || (DeMarker_Buy_signal==false && DeMarker_Sell_signal==true)) && // когда DeMarker пересекает медленую (ниже уровня селл) для шорт
( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_SELL) || (MA_Buy_signal==false && MA_Sell_signal==true)) && // пересечение МА DeMarkers
(iClose( Symbol (), trend_period, 1 ) < Taichi_1 && Taichi_1 < TaichiFor_1 && Signal_1 < SSignal_1 && FlatBuffer1== 0 && FlatBuffer2== 0 ))
{
Print ( "Taichi_1 = " , Taichi_1, "TaichiFor_1 = " ,TaichiFor_1, "Signal_1 = " , Signal_1, "SSignal_1 = " ,SSignal_1, "FlatBuffer1 = " , FlatBuffer1, "FlatBuffer2 = " , FlatBuffer2);
Print ( "DeMarker_1 = " , DeMarker_1, "DeMarker_2 = " ,DeMarker_2, "FastMA_1 = " , FastMA_1, "FastMA_2 = " ,FastMA_2, "SlowMA_1 = " , SlowMA_1, "SlowMA_2 = " , SlowMA_2);
return ( 20 );
} // Открытие Sell //--------------------------------------------------------------- 6 --return ( 0 ); // Выход из пользов. функции
}
//--------------------------------------------------------------- 7 --//для оптимизации по всем ТФint GetPeriod( int period)
{ int periodres;
switch (period)
{
case1 : periodres= 1 ; break ;
case2 : periodres= 5 ; break ;
case3 : periodres= 15 ; break ;
case4 : periodres= 30 ; break ;
case5 : periodres= 60 ; break ;
case6 : periodres= 240 ; break ;
case7 : periodres= 1440 ; break ;
case8 : periodres= 10080 ; break ;
default : periodres= 1 ; break ;
}
return (periodres);
}
int type_op_DeMarker( double D1, double D2, double F1, double F2, double S1, double S2) // Функция - условия для входа в рынок и сохранения их через переменные Buy_signal и Sell_signal (даже после их сработки - до отмены// противоположными сигналами)
{
if (D2-S2 < 0 && D1-S1 > 0 && D1 > F1 && D1 < DeMarker_OpenLevel_Buy)
{
DeMarker_Buy_signal=true;
DeMarker_Sell_signal=false;
return (OP_BUY);
}
if (D2-S2 > 0 && D1-S1 < 0 && D1 < F1 && D1 > DeMarker_OpenLevel_Sell)
{
DeMarker_Buy_signal=false;
DeMarker_Sell_signal=true;
return (OP_SELL);
}
elsereturn (- 1 );
}
int type_op_MA( double d1, double d2, double f1, double f2, double s1, double s2) // условия для входа в рынок и сохранения их через переменные Buy_signal и Sell_signal (даже после их сработки - до отмены// противоположными сигналами)
{
if (f2 - s2 < 0 && f1 - s1 > 0 )
{
MA_Buy_signal=true;
MA_Sell_signal=false;
return (OP_BUY);
}
if (f2-s2 > 0 && f1-s1 < 0 )
{
MA_Buy_signal=false;
MA_Sell_signal=true;
return (OP_SELL);
}
elsereturn (- 1 );
}
Ek olarak gitmeniz gerekecek - ana kriter TimeCurrent aracılığıyla tetiklendiğinde, yani mevcut zamanı hatırlamanız gerekecek. analoji ile, ilk f-ii'de int type_op_DeMarker dönüşten önce belirtin (OP_BUY); veya geri dön (OP_SELL); x = TimeCurrent gibi ifade; burada x, datetime türünde global bir değişkendir. Bundan sonra aynısını ikinci fonksiyon int type_op_MA ... ile yapacaksınız - orada zaten y = TimeCurrent değişkenini hatırlıyorsunuz;
Ardından, ticaret kriterlerini hesaplama bloğunda, bu iki değişkenin artı ve değerini aşağıdaki şekilde karşılaştırın (Taichi değerleriyle çalışmak için bir analoga ihtiyacınız olmadığı ortaya çıktı - bunun yerine zamanı karşılaştırın iki ticaret sinyalinizin gelişi):
// Вычисление торговых критериевif (( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (DeMarker_Buy_signal == true && DeMarker_Sell_signal== false )) && // когда DeMarker пересекает медленую (выше уровня бай (0.7)) для лонг
( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (MA_Buy_signal== true && MA_Sell_signal== false )) && // пересечение МА DeMarkers
((x+ 43200 ) < y )) //43200 - это количество секунд в 12-ти часах
{
Print ( "Время сработки первого условия х(в секундах) = " , х, " Время сработки второго условия y (в секундах) = " , y);
Print ( "DeMarker_1 = " , DeMarker_1, "DeMarker_2 = " ,DeMarker_2, "FastMA_1 = " , FastMA_1, "FastMA_2 = " ,FastMA_2, "SlowMA_1 = " , SlowMA_1, "SlowMA_2 = " , SlowMA_2);
return ( 10 ); // Открытие Buy
}
not Artı olarak, çalışan TF'nin değerini optimize etme olasılığı için size bir f-th gönderiyorum.
P.P.S. Böylece benim için de benzer bir kod kurgusu düzenlendi. Expert Advisor'ın bu tür koşullarını yerine getirmek için çok daha uygun kod seçenekleri olduğunu göz ardı etmiyorum. :-)))
Bir döviz çiftinde bir danışmanda kar nasıl hesaplanır ???
Örneğin, Euro cinsinden farklı fiyatlarla açık yedi satın alma emrim var. diğer çiftler için diğer siparişlere dokunmadan euro karını nasıl hesaplayabilirim????
kodu danışmana uygula, silene kadar böyle bir şeyim vardı, saatlik zaman dilimini kullandım
orderselect - geçmişteki son siparişi seçin
kapanış saatini al tam olarak kapanış saatini çek
ve bir emri açmadan önce, mevcut saatin geçmişten emri kapatma saatine eşit OLMAMASI koşulunu ayarlayın.
lütfen sorun için bana yardım edin, ikinci fiyat güncellemesinden sonra TP değişkenim sıfırlanıyor , yani danışman bir emir açıp TP ve Bid değerini veriyor, ikisi de sıfır değil, ardından fiyat tekrar güncelleniyor ve TP sıfır oluyor, kodda böyle bir komut olmamasına rağmen, SL'yi yukarı çekmekle ilgili bir sorunum vardı ve şimdi sorunun TP'yi belirlemede olduğu ortaya çıktı.
int başlangıç()
{
//----
çift TP;
çift SL;
if (Sipariş Toplamı()==0)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Teklif+4*Puan);
OrderSelect(OrdersTotal()-1,SELECT_BY_POS);
TP=OrderTakeProfit();
}
Uyarı("TP="+TP);
Alert("Teklif=" + Teklif);
if (Sipariş Toplamı()>0)
{
if (TP-Teklif<3*Puan)
{
Uyarı ("TP'ye 1 veya 2 yaklaştı");
Uyarı("TP="+TP);
Alert("Teklif=" + Teklif);
}
}
//----
dönüş(0);
}
lütfen sorun için bana yardım edin, ikinci fiyat güncellemesinden sonra TP değişkenim sıfırlanıyor, yani danışman bir emir açıp TP ve Bid değerini veriyor, ikisi de sıfır değil, ardından fiyat tekrar güncelleniyor ve TP sıfır oluyor, kodda böyle bir komut olmamasına rağmen, SL'yi yukarı çekmekle ilgili bir sorunum vardı ve şimdi sorunun TP'yi belirlemede olduğu ortaya çıktı.
double TP, SL;
int start()
{
//----
if (OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Bid+4*Point);
OrderSelect(OrdersTotal()-1,SELECT_BY_POS);
TP=OrderTakeProfit();
}
Alert ("TP=" + TP);
Alert ("Bid=" + Bid);
if (OrdersTotal()>0)
{
if (TP-Bid<3*Point)
{
Alert ("Приблизился к ТП на 1 или 2");
Alert ("TP=" + TP);
Alert ("Bid=" + Bid);
}
}
//----
return(0);
}
Lütfen bana yeni bir barda sadece 1 kez nasıl sipariş açacağımı söyle ????
Buradan okuyun: https://www.mql5.com/ru/forum/134437
Merhaba!
Strateji, iki sinyalin varlığını sağlar: ana ve ikincil. Anlaşma, ikinci sinyal en geç 12 saat sonra göründüğünde açılır. Soru: 12 saat sonra ortaya çıkarsa bir danışmana bir sinyale tepki vermemesi nasıl öğretilir? Lütfen, mümkünse, belirli bir kod örneği
Merhaba!
Strateji, iki sinyalin varlığını sağlar: ana ve ikincil. Anlaşma, ikinci sinyal en geç 12 saat sonra göründüğünde açılır. Soru: 12 saat sonra ortaya çıkarsa bir danışmana bir sinyale tepki vermemesi nasıl öğretilir? Lütfen, mümkünse, belirli bir kod örneği
Merhaba Dmitry. Kendi adıma, size aşağıdaki seçeneği sunmaya hazırım. Bir benzetme için, bu makalenin alım satım kriterlerinin tetiklenmesine bakın - ayrıca iki sinyalde bir emrin tetiklenmesi var - yani, ikinci resimden sonra bakın "DeMarker grafiğinde beklemeniz gereken ilk şey, DeMarker'ın 0.7 alanındaki hızlı ve yavaş MA çizgilerini kısa bir pozisyon için geçer.Bu ilk ön sinyaldir.Daha sonra, gerçek MA çizgilerinin kendilerinin kesişmesini bekleriz.Bu sinyal ana sinyaldir, bundan sonra alınabilir Taichi göstergesinin okumaları gibi. MA çizgilerinin kesişimi gerçekleşmediyse, sinyalin yanlış olduğu ve fiyat hareketinin gelişiminin devam edeceği kabul edilir." İşte bunu kod biçiminde nasıl yaptım - ticaret kriterlerini tetiklemekten sorumlu olan baykuşların dahil edilmesinde.
Ana özellik, bir veya başka bir ticaret kriteri tetiklendiğinde bayrakları ayarlayarak ve temizleyerek aşağıdaki (sonda) iki dahil etme işlevi üzerinde çalışmamızdır.
Ek olarak gitmeniz gerekecek - ana kriter TimeCurrent aracılığıyla tetiklendiğinde, yani mevcut zamanı hatırlamanız gerekecek. analoji ile, ilk f-ii'de int type_op_DeMarker dönüşten önce belirtin (OP_BUY); veya geri dön (OP_SELL); x = TimeCurrent gibi ifade; burada x, datetime türünde global bir değişkendir. Bundan sonra aynısını ikinci fonksiyon int type_op_MA ... ile yapacaksınız - orada zaten y = TimeCurrent değişkenini hatırlıyorsunuz;
Ardından, ticaret kriterlerini hesaplama bloğunda, bu iki değişkenin artı ve değerini aşağıdaki şekilde karşılaştırın (Taichi değerleriyle çalışmak için bir analoga ihtiyacınız olmadığı ortaya çıktı - bunun yerine zamanı karşılaştırın iki ticaret sinyalinizin gelişi):
not Artı olarak, çalışan TF'nin değerini optimize etme olasılığı için size bir f-th gönderiyorum.
P.P.S. Böylece benim için de benzer bir kod kurgusu düzenlendi. Expert Advisor'ın bu tür koşullarını yerine getirmek için çok daha uygun kod seçenekleri olduğunu göz ardı etmiyorum. :-)))
Bir döviz çiftinde bir danışmanda kar nasıl hesaplanır ???
Örneğin, Euro cinsinden farklı fiyatlarla açık yedi satın alma emrim var. diğer çiftler için diğer siparişlere dokunmadan euro karını nasıl hesaplayabilirim????
tüm açık siparişleri taramak için SelectOrder'ı kullanın
bir çifte ihtiyacınız olup olmadığını kontrol edin (OrderSymbol)
o zaman, gerekli sipariş OrderProfit ise, herhangi bir değişkene kar eklersiniz
işte kullanışlı işlevlere sahip bir bağlantı https://docs.mql4.com/en/trading/OrderSelect
solda işlemlerin olduğu bir menü var, hepsi orada açıklanıyor