[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 497

 
Lütfen bana yeni bir barda sadece 1 kez nasıl sipariş açacağımı söyle ????
 

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);
}

 
LazarevDenis :

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);
}
Böyle dene..
 
VOLDEMAR :
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
 
Cmu4, çok teşekkür ederim, çok yardımcı oldunuz
 

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

 
demlin :

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.

 //--------------------------------------------------------------------
// Criterion.mqh
// 
//--------------------------------------------------------------- 1 --
// Функция вычисления торговых критериев.
// Возвращаемые значения:
// 10 - открытие Buy  
// 20 - открытие Sell 
// 0  - значимых критериев нет
// 
//--------------------------------------------------------------- 2 --
// Внешние переменные:
extern string A5 = "Параметры" ;
//extern int       Period_K = 5;            // Период K
//extern int       Period_D = 3;            // Период D
//extern int       Slowing = 3;             // Замедление

extern int Tenkan= 9 ;
extern int Kijun= 26 ;
extern int Senkou= 52 ;
extern int 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)
  {
   case 1 : periodres= 1 ; break ;
   case 2 : periodres= 5 ; break ;
   case 3 : periodres= 15 ; break ;
   case 4 : periodres= 30 ; break ;
   case 5 : periodres= 60 ; break ;
   case 6 : periodres= 240 ; break ;
   case 7 : periodres= 1440 ; break ;
   case 8 : 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);
          }   
   else return (- 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);
          }   
   else return (- 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????

 

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

Neden: