Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 120

 

             int digits = ( int ) SymbolInfoInteger ( _Symbol , SYMBOL_DIGITS );       // number of decimal places
             double point = SymbolInfoDouble ( _Symbol , SYMBOL_POINT );             // point
             double ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );                 // current price for closing SHORT
             double SL = ask-_SL*point;                                         // unnormalized SL value
            SL = NormalizeDouble (SL,digits);                                   // normalizing Stop Loss
             double    TP = ask+_TP*point;                                       // unnormalized TP value
            TP = NormalizeDouble (TP,digits);                                   // normalizing Take Profit
             double    open_price = SymbolInfoDouble ( _Symbol , SYMBOL_BID );

             if (!trade.Buy(Volume, _Symbol ,open_price,SL,TP, "" ))
               {
                   //--- failure message
                   Print ( "Sell() method failed. Return code=" ,trade.ResultRetcode(),
                   ". Code description: " ,trade.ResultRetcodeDescription());
                   return ( false );             
               }
             else
               {
                   Print ( "Sell() method executed successfully. Return code=" ,trade.ResultRetcode(),
                   " (" ,trade.ResultRetcodeDescription(), ")" );
               }

Lütfen bana strateji test cihazına neden zararı ve karı durdurmayı koymadığımı, sadece piyasa fiyatından bir pozisyon açtığımı söyler misiniz?

Açmak için CTrade (trade.Buy) kullanıyorum

(trade.PositionOpen) kullanarak açmaya çalıştım, aynı şey, demoda açılıp stop koyuyor, test cihazında stoplar 0, sorunun ne olabileceğini anlamıyorum.

 
Merhaba sevgili programcılar. Benim için programcılar tanrılar gibidir - hiç yoktan, yoktan var eden, çalışan ve hatta maddi şeyler yaratan bir şey yaratmak - sadece harika ... Zaman hakkında bir makale okudum. ama periyodikliği, hatta periyodikliği bile değil, bir danışman için doğru zaman dilimlerinde açıp kapama hakkında hiçbir şey söylemez. Belki birileri bu konuyu sormuştur. Şimdilik, danışmanı her biri kendi zamanında başlayacak ve kapanacak şekilde yeniden adlandırmalısınız, ancak MT5'te yalnızca bir çift - bir danışman olduğundan, kolları değiştirmeniz gerekir. ve zaman çizelgesi gibi bir şey ortaya çıkacaktı ... Teşekkürler
 
Top2n :

Elle yapabileceğiniz açıktır, robotun sergilenmesi gerekir.

sipariş değiştirme işlevi nasıl oluşturulur?

https://www.mql5.com/ru/articles/134
Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • 2010.08.05
  • Dmitry Fedoseev
  • www.mql5.com
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
 
İzler Sadece burada doğru zamanda açma ve kapama sıklığını ortaya koyuyorum, üretmiyorlar ve geri dönüşü hesaba katmıyorlar. Pekala, fikir şudur: takip eden bir yolculuktan sonra, genellikle bir periyodun sonunda, örneğin bir saat veya 15 dakika, birkaç dakika bekleyin ve tekrar açılmasına izin verin ve gösterge ile hizalamayı belirleyin ve devam edene kadar devam edin. bir sonraki gezi ... :-))))
 
Merhaba! Söyleyin lütfen, danışman için bir fark var mı: minimum depozito 1000 & (dolar hesabı) mı yoksa 1000 ruble (ruble hesabı) mı?
 
Pavel777 :
Merhaba! Söyleyin lütfen, danışman için bir fark var mı: minimum depozito 1000 & (dolar hesabı) mı yoksa 1000 ruble (ruble hesabı) mı?
Her şey sadece danışmana değil, danışmana da bağlı. Bence asıl mesele ticaret danışmanının partisinin büyüklüğü.
 

Sevgili yardım!!! Zaten eller bitmiş stratejiden son adıma düşüyor. Bir anlaşmanın ortalaması alınamıyor

 bool PositionModify( const string smb, const double SL, const double TP)
  {       
       MqlTradeRequest mrequest={ 0 };
       MqlTradeResult   mresult ={ 0 };
      
      mrequest.action   = TRADE_ACTION_SLTP ;
      mrequest.symbol = _Symbol ;   
      mrequest.sl       = SL;
      mrequest.tp       = TP;
      
       OrderSend ( mrequest, mresult );
       if ( mresult.retcode == 10009 || mresult.retcode == 10008 ) //запрос выполнен или ордер успешно помещен
      {          
         Alert ( "Стопка прошла#:" , mresult.order, "!!" );
      }
       else
      {
         Alert ( "Стопка не прошла - код ошибки:" , GetLastError () );
         return ( false );
      }   
   return ( true );
  }

Bir anlaşma yapmaya çalışıyorum. Ama ayarlarda

PositionModify( Symbol, SL,ТР )

Ne ekleyeceğimi bilmiyorum, çünkü açılış fiyatını alıyorum, ancak ortalamanın bir sonucu olarak fiyatın nereye taşınmasına ihtiyacım var. belki böyle bir işlev vardır.

Veya sadece siparişlerin tarihçesi aracılığıyla birinci ve ikinci siparişlerin fiyatını bulmak ve zaten bu verilere dayanarak ortalamaya göre, bu şekilde benim için çok karmaşık olmasını istemem!!!

 datetime end= TimeCurrent ();                 // текущее серверное время
   datetime start=end- PeriodSeconds ( PERIOD_D1 ); // установим начало на сутки назад
//--- запросим в кэш программы нужный интервал торговой истории
   HistorySelect (start,end);
//--- получим количество сделок в истории
   int deals= HistoryDealsTotal ();
//--- получим тикет сделки, имеющей последний индекс в списке
   ulong deal_ticket= HistoryDealGetTicket (deals- 1 );
   if (deal_ticket> 0 ) // получили в кэш сделку, работаем с ней
     {
       //--- тикет ордера, на основании которого была проведена сделка
       ulong order     = HistoryDealGetInteger (deal_ticket, DEAL_ORDER );
       long order_magic= HistoryDealGetInteger (deal_ticket, DEAL_MAGIC );
       long pos_ID     = HistoryDealGetInteger (deal_ticket, DEAL_POSITION_ID );
    

double priceh   = HistoryDealGetInteger (deal_ticket, DEAL_PRICE );   // не могу определить цену открытия

       PrintFormat ( "Сделка #%d по ордеру #%d с ORDER_MAGIC=%d участвовала в позиции %d" ,                   deals- 1 ,order,order_magic,pos_ID);      }    else                // неудачная попытка получения сделки      {        PrintFormat ( "Всего в истории %d сделок, не удалось выбрать сделку" +                    " с индексом %d. Ошибка %d" ,deals,deals- 1 , GetLastError ());      }      //--- получим общее количество позиций    int positions= PositionsTotal (); //--- пробежим по списку ордеров    for ( int i= 0 ;i<positions;i++)      {        ResetLastError ();        //--- скопируем в кэш позицию по ее номеру в списке        string symbol= PositionGetSymbol (i); //  попутно получим имя символа, по которому открыта позиция        if (symbol!= "" ) // позицию скопировали в кэш, работаем с ней         {          long pos_id            = PositionGetInteger ( POSITION_IDENTIFIER );          double price           = PositionGetDouble ( POSITION_PRICE_OPEN );          ENUM_POSITION_TYPE type=( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE );          long pos_magic         = PositionGetInteger ( POSITION_MAGIC );          string comment         = PositionGetString ( POSITION_COMMENT );          if (pos_magic==EA_Magic)            {          

 PositionModify( Symbol (), NormalizeDouble (( - StopLoss* _Point ), 4 ),                                  NormalizeDouble (( + TakeProfit* _Point ), 4 )); //  ну здесь еще через запрос в зависимости от типа ордера

           }          PrintFormat ( "Позиция #%d по %s: POSITION_MAGIC=%d, цена=%G, тип=%s, комментарий=%s" ,                      pos_id,symbol,pos_magic,price, EnumToString (type),comment);         }        else            // вызов PositionGetSymbol() завершился неудачно         {          PrintFormat ( "Ошибка при получении в кэш позиции c индексом %d." +                      " Код ошибки: %d" , i, GetLastError ());         }      }


 
Top2n :

Sevgili yardım!!! Zaten eller bitmiş stratejiden son adıma düşüyor. Bir anlaşmanın ortalaması alınamıyor

Bir anlaşma yapmaya çalışıyorum. Ama ayarlarda

Ne ekleyeceğimi bilmiyorum, çünkü açılış fiyatını alıyorum, ancak ortalamanın bir sonucu olarak fiyatın nereye taşınmasına ihtiyacım var. belki böyle bir işlev vardır.

Veya sadece siparişlerin tarihçesi aracılığıyla birinci ve ikinci siparişlerin fiyatını bulmak ve zaten bu verilere dayanarak ortalamaya göre, bu şekilde benim için çok karmaşık olmasını istemem!!!

Kalemlerle başlamak için ortalama algoritmasını boyamanız gerekir. Bazı nedenlerden dolayı, şimdi negatif bir stop loss değeri gönderiyorsunuz, ancak gerçek bir stop loss fiyatı olmalıdır. Bu parametreleri ortalama algoritmanıza göre ayarlayın.
 
Önceden, değişken extern türündeydi, şimdi girildi, ancak zaten bir sabit, extern artık gösterge menüsünde görüntülenmiyor. Bu değerleri değiştirebilmek için daha önce olduğu gibi yapmak mümkün mü yoksa ek değişkenler mi oluşturmam gerekiyor?
 

Merhaba, lütfen bir noktayı açıklığa kavuşturun.

Örneğin bir danışman var, duruma göre pozisyonların açıldığı veya kapatıldığı bir OnTick olayı var. EA, zaman çerçevesini ayarlayabileceğiniz strateji test cihazında test edilebilir. Nasıl ilişkili olduklarını anlamıyorum. Strateji test cihazında bir EA'yı test ederken her onay işaretine yanıt vermiyor mu? Yoksa sadece test cihazında belirtilen zaman dilimine mi tepki veriyor? umarım soru açıktır