[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 285

 
rid >> :

Belki https://www.mql5.com/ru/forum/107476/page21 işlevi yardımcı olacaktır.

isCloseLastPosByTake() işlevi.
Bu fonksiyon, son pozisyonu alma ile kapatmak için bayrağı döndürür.

Bayrak kaldırıldı - Doğru - TakeProfit çalıştı.

Bayrak atlandı - Yanlış - pozisyon başka bir nedenle kapatıldı.


Fonksiyonun kendisini kodun en sonuna koyun. Ve satış şartlarına ekleyin:


Hepinize iyi günler, akşamlar veya sabahlar.

Herşeyi rid'in yazdığı gibi yaptım. Fonksiyonu kodun en sonuna ekledim, satış şartlarına ekledim

 if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) { //продаем

sadece düşündüm ve düşündüm ve satın almak için ekledim. Sonuçta, siparişler sadece BUY ile değil, aynı zamanda SHELL tarafından da kapatılacaktır.

isCloseLasPosByTake() işlevini sonuna ekledim, derleme sırasında ortaya çıktı

2;116;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;104:33;'(' - function definition unexpected
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:7;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:14;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:27;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:33;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:15;'op' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:37;'op' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:17;'mn' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:46;'mn' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;116:19;'t' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;117:17;'t' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;127:19;'sy' - variable not defined

bunlar turtalar ya da n/p-k GOTSMAN dediğimiz aşçı yağlı boya tablo. Su ısıtıcısına yardım et .... peter yok hiçbir şey .......

aaa kodun kendisi (yani sadece f-i start)

 //+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
   {
//----
     // Узнаем уровень стопов и спрэд
     int Spread = MarketInfo ( Symbol ( ) , MODE_SPREAD ) ;
     int StopLevel = MarketInfo ( Symbol ( ) , MODE_STOPLEVEL ) ;

     // Рассчитываем значения средних на 0-ом и 1-ом барах
     double MAF_0 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 0 ) ;
     double MAF_1 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 1 ) ;
     double MAS_0 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 0 ) ;
     double MAS_1 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 1 ) ;
    
     // открытие позиции Buy покупка
     if ( MAF_1 < MAS_1 & & MAF_0 > MAS_0 )
     if ( isCloseLastPosByTake ( NULL , OP_SELL , MagicNumber ) = = true ) { //покупаем
     if ( CheckOrders ( OP_SELL ) )
       {
       if ( StopLoss < = StopLevel + Spread )
         double SL = 0 ;
         else
         SL = Ask - StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         double TP = 0 ;
         else
         TP = Ask + TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_BUY , Lots , Ask , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Buy. Ошибка №" , GetLastError ( ) ) ; 
       }
    
     // Открытие позиции Sell продажа  
     if ( MAF_1 > MAS_1 & & MAF_0 < MAS_0 )
     if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) { //продаем
     if ( CheckOrders ( OP_BUY ) )
       {
       if ( StopLoss < = StopLevel + Spread )
         SL = 0 ;
         else
         SL = Bid + StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         TP = 0 ;
         else
         TP = Bid - TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Sell. Ошибка №" , GetLastError ( ) ) ; 
       }
       bool isCloseLastPosByTake ( string sy = NULL , int op = - 1 , int mn = - 1 ) {
   datetime t ;
   double    ocp , otp ;
   int       dg , i , j = - 1 , k = OrdersHistoryTotal ( ) ;

   if ( sy = = "0" ) sy = Symbol ( ) ;
   for ( i = 0 ; i < k ; i + + ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ) {
       if ( OrderSymbol ( ) = = sy | | sy = = NULL ) {
         if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
           if ( op < 0 | | OrderType ( ) = = op ) {
             if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) {
               if ( t < OrderCloseTime ( ) ) {
                t = OrderCloseTime ( ) ;
                j = i ;
               }
             }
           }
         }
       }
     }
   }
   if ( OrderSelect ( j , SELECT_BY_POS , MODE_HISTORY ) ) {
    dg = MarketInfo ( sy , MODE_DIGITS ) ;
     if ( dg = = 0 ) if ( StringFind ( OrderSymbol ( ) , "JPY" ) < 0 ) dg = 4 ; else dg = 2 ;
    ocp = NormalizeDouble ( OrderClosePrice ( ) , dg ) ;
    otp = NormalizeDouble ( OrderTakeProfit ( ) , dg ) ;
     if ( ocp = = otp ) return ( True ) ;
   }
   return ( False ) ;
}
//----
   return ( 0 ) ;
   } //+------------------------------------------------------------------+
 
igrok2008 >> :


Mesajımda özellikle yazdım. Bu isCloseLastPosByTake() işlevi, BAŞLANGIÇ FONKSİYONUNUN DIŞINDA , kodun en sonuna yerleştirilmelidir!

Ve nereye yapıştırdın?

Ve satış ve satın alma koşullarında kaşlı ayraçlara dikkat edin. Orada açıkçası yeterince sahip değilsiniz (açık parantezlerin sayısının kapalı olanların sayısına eşit olduğunu kontrol edin). İşte düzeltilmiş satış:

    //  ----- Открытие позиции Sell продажа------------  
    if ( MAF_1 > MAS_1 & & MAF_0 < MAS_0 )                         {
    if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) {
     if ( CheckOrders ( OP_BUY ) )                                     {
       if ( StopLoss < = StopLevel + Spread )
         SL = 0 ;        else         SL = Bid + StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         TP = 0 ;        else         TP = Bid - TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Sell. Ошибка №" , GetLastError ( ) ) ; 
                 }
                }
               }
      //---конец блока продажи ------------------------------
 

Tünaydın!!!


Yardıma ihtiyacım var. Mütevazı olmadığım için özür dilerim.

Ama işte benim sorunum, martin tabanlı bir EA'm var, istediği gibi ilk SAT veya AL emrini veriyor ve danışmanın özelliklerinde AL veya SAT seçeneğini seçebilmek istiyorum. Onlar. Örneğin SATIN AL özelliklerini koydum ve sadece SATIN AL emrini açıyor ya da tam tersi.

MQL4'te Programlama Maalesef henüz öğrenemedim.


Danışmanımı ekliyorum.


Cevap veren herkese şimdiden teşekkürler!!!

 
rid >> :

Mesajımda özellikle yazdım. Bu isCloseLastPosByTake() işlevi, BAŞLANGIÇ FONKSİYONUNUN DIŞINDA , kodun en sonuna yerleştirilmelidir!

Ve nereye yapıştırdın?

Ve satış ve satın alma koşullarında kaşlı ayraçlara dikkat edin. Orada açıkçası yeterince sahip değilsiniz (açık parantezlerin sayısının kapalı olanların sayısına eşit olduğunu kontrol edin). İşte düzeltilmiş satış:


Anladığım kadarıyla f-ii başladıktan sonra taktım .....

Yani yanlış anladım, tokat için teşekkürler :-))

Doğru anladıysam, uzman başlatmasızlaştırma fonksiyon bloğunun sonunda } sonrasına konulmalı ??????? veya dönüş (0)'dan sonra; f-ii başlangıcının en sonunda ???????

Sabrınız için şimdiden teşekkür ederiz!!!!!!

 
igrok2008 >> :

Anladığım kadarıyla f-ii başladıktan sonra taktım .....

Yani yanlış anladım, tokat için teşekkürler :-))

Doğru anladıysam, uzman başlatmasızlaştırma fonksiyon bloğunun sonunda } sonrasına konulmalı ??????? veya dönüş (0)'dan sonra; f-ii başlangıcının en sonunda ???????

Sabrınız için şimdiden teşekkür ederiz!!!!!!

Dışarıya yerleştirilmelidir. Hiçbirinin içinde değil. işlevler, ancak ayrı bir bağımsız işlev olarak.

Bunun gibi :

 int start ( )
  {
//----
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo ( Symbol ( ) , MODE_SPREAD ) ;
    int StopLevel = MarketInfo ( Symbol ( ) , MODE_STOPLEVEL ) ;

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 0 ) ;
    double MAF_1 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 1 ) ;
    double MAS_0 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 0 ) ;
    double MAS_1 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 1 ) ;
    
    // открытие позиции Buy покупка
    if ( MAF_1 < MAS_1 & & MAF_0 > MAS_0 )                         {
    if ( isCloseLastPosByTake ( NULL , OP_SELL , MagicNumber ) = = true ) {
     if ( CheckOrders ( OP_SELL ) )                                      {
       if ( StopLoss < = StopLevel + Spread )
         double SL = 0 ;        else         SL = Ask - StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         double TP = 0 ;        else         TP = Ask + TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_BUY , Lots , Ask , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Buy. Ошибка №" , GetLastError ( ) ) ; 
                }
               }
              }
//-------------------Конец покупки -----------------------

    //  ----- Открытие позиции Sell продажа------------  
    if ( MAF_1 > MAS_1 & & MAF_0 < MAS_0 )                         {
    if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) {
     if ( CheckOrders ( OP_BUY ) )                                     {
       if ( StopLoss < = StopLevel + Spread )
         SL = 0 ;        else         SL = Bid + StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         TP = 0 ;        else         TP = Bid - TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Sell. Ошибка №" , GetLastError ( ) ) ; 
                 }
                }
               }
      //---конец блока продажи ------------------------------
    
//----
   return ( 0 ) ;
  } //+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+


//ЖЖЖЖЖЖЖ Другие вызываемые пользовательские функции ЖЖЖЖЖЖ

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия           |
//|  последней позиции по тейку.                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake ( string sy = "" , int op = - 1 , int mn = - 1 ) {
  datetime t ;
  double   ocp , otp ;
  int      dg , i , j = - 1 , k = OrdersHistoryTotal ( ) ;

  if ( sy = = "0" ) sy = Symbol ( ) ;
  for ( i = 0 ; i < k ; i + + ) {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ) {
      if ( OrderSymbol ( ) = = sy | | sy = = "" ) {
        if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
          if ( op < 0 | | OrderType ( ) = = op ) {
            if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) {
              if ( t < OrderCloseTime ( ) ) {
                t = OrderCloseTime ( ) ;
                j = i ;
              } } } } } } }

  if ( OrderSelect ( j , SELECT_BY_POS , MODE_HISTORY ) ) {
    dg = MarketInfo ( sy , MODE_DIGITS ) ;
    if ( dg = = 0 ) if ( StringFind ( OrderSymbol ( ) , "JPY" ) < 0 ) dg = 4 ; else dg = 2 ;
    ocp = NormalizeDouble ( OrderClosePrice ( ) , dg ) ;
    otp = NormalizeDouble ( OrderTakeProfit ( ) , dg ) ;
    if ( ocp = = otp ) return ( True ) ;
  }
  return ( False ) ;
}


Danışmanın bu koşullar altında çalışacağından emin değilim. Çünkü ilk pozisyon açılamayacak...

isCloseLastPosByTake() işlevini satın alma koşulundan veya satış koşulundan kaldırmak gerekir.

Daha sonra danışman çalışacaktır.

 
Rover82 >> :

Tünaydın!!!

Ama işte benim sorunum, martin tabanlı bir EA'm var, istediği gibi ilk SAT veya AL emrini veriyor ve danışmanın özelliklerinde AL veya SAT seçeneğini seçebilmek istiyorum. Onlar. Örneğin SATIN AL özelliklerini koydum ve sadece SATIN AL emrini açıyor ya da tam tersi.

Danışmanımı ekliyorum.

Cevap veren herkese şimdiden teşekkürler!!!


Pek kimse cevap vermeyecek. Expert Advisor'ın derlemesi çözülür (saldırıya uğrar) ve bu tür dosyalar burada hoş karşılanmaz...

 
WinExec("C:\\Program Files\\Opera\\opera.exe http://www.mail.ru",2);
Merhaba! Bu, belirli bir tarayıcı tarafından bir bağlantının başlatılmasıdır, ancak aynı bağlantı varsayılan olarak nasıl başlatılır?
 
Yani, varsayılan tarayıcı
 
Dimoncheg >> :
Yani, varsayılan tarayıcı

ShellExecute, "aç" komutu, emnip.

 

MQL 4 çalışmaya karar verdi. bulunan her şey benim isteklerimi karşılamıyor. Şimdi anladım profesyonellerin nasıl çalıştığını anlamak ve fikrinize uyacak şekilde biraz geliştirmek için başka birinin Uzman Danışmanı. Ekli (basit ve küçük, bir sayfa) özel işlev kodu vardır. Çaydanlık karakterimden dolayı iki gün yapamıyorum. anlayın - sonuç olarak bu işlev ne döndürecek ve Else hangi iç içe koşula ait? - ne zaman çalışacak?

Yoğunluğuma bir bilgi kıvılcımı atmak isteyen var mı?

Aşağıdakileri alıyorum:

Tüm işlevin amacı - bu parite için önceden verilmiş bir emir olup olmadığını ve varsa türünü belirlemek için.

Bu işlevi başlatan işlev, geçiş prosedüründe bir tane varsa ve siparişler seçilmişse, iki tane varsa işlev "1" değerini döndürmelidir. siparişler - "2" ve siparişlerin yokluğunda "-1".

döngü başlar l_pos_16 = 0 . Birkaç çift için bekleyen dört sipariş olduğunu varsayalım, danışmanın çalıştığı çift için iki tane dahil ve bunlar ilk değil.

Ancak, döngünün ilk iterasyonunda if ( OrderSelect ( l _ pos _16, SELECT _ BY _ POS , MODE _ TRADES )) fonksiyonunun listedeki “0” numaralı pozisyonu kontrol edeceği ortaya çıktı. emirler var ama öyle bir pozisyon yok, (t .k numaralandırmanın 1 numaralı pozisyondan geldiğini anlıyorum ve sonra başka bir pozisyona transfer olacak) fCountOrders'tan tam çıkışla ( int & a _ count _0, int & a _ count _4, int & a _ count _8, int & a _ count _12) dönen değer Return (-1).

Anladığım kadarıyla, tüm işlevin anlamı kaybolur. ne olursa olsun bu çift için emirlerin varlığından veya yokluğundan, sonuç aynı olmalıdır.

Ancak Expert Advisor çalışırken bu fonksiyon çağıran fonksiyonun kendisinden ne beklediğini belirler ve verir, bu da daha sonra buna bağlı olarak çalışır. sonuçtan.

başka anlayamıyorum Dönüş (-1) içinde çalışacak

if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {

Veya aynı içinde if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {

KOD özellikler :

int fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12)

a_count_0 = 0;

a_count_4 = 0;

a_count_8 = 0;

a_count_12 = 0;

gi_252 = 0;

for (int l_pos_16 = 0; l_pos_16 < OrdersTotal(); l_pos_16++) {

if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {

geçiş(SiparişTürü()) durum OP_BUY:

a_count_0++;

gi_252 = 1;

g_ticket_268 = OrderTicket();

gs_272 = SiparişYorumu();

g_ord_open_price_256 = OrderOpenPrice();

g_ord_stoploss_288 = OrderStopLoss();

g_ord_takeprofit_296 = OrderTakeProfit();

kırmak;

OP_SELL durumu:

a_count_4++;

gi_252 = -1;

g_ticket_268 = OrderTicket();

gs_272 = SiparişYorumu();

g_ord_open_price_256 = OrderOpenPrice();

g_ord_stoploss_288 = OrderStopLoss();

g_ord_takeprofit_296 = OrderTakeProfit();

kırmak;

OP_BUYSTOP durumu:

a_count_8++;

kırmak;

OP_SELLSTOP durumu:

a_count_12++;

}

}

} başka bir dönüş (-1);

}

dönüş (a_count_0 + a_count_4 + a_count_8 + a_count_12);

/* fonksiyonun normal çalışması sırasında, değişkende bir tane döndürülecek durumlardan birinde ve diğerlerinde "0", hangi birinin olduğunu gösterir

sipariş türleri ve aynı zamanda bu siparişin numarası arama fonksiyonu için kullanılabilir,

yorum, açık fiyat, zararı durdur ve taik kar */

}

Neden: