Çaydanlıktan gelen sorular - sayfa 5

 

Durdurma kaybının boyutunu 200 puana değiştiren bir komut dosyası yaptım, ancak durağı hareket ettirmek yerine bir şeyler yanlış

 //+------------------------------------------------------------------+
//|                                                      traling.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
double BuyStoploss= 200 ;
double SellStoploss= 200 ;
double sl,tp;
void OnStart ()
  {
//---
MqlTradeRequest m_request;
MqlTradeResult m_result;
 if ( PositionSelect ( _Symbol ))
           {
             //--- если позиция buy
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
              {
               //--- получаем значение стоплосс для позиции buy
               sl=BuyStoploss;
               //--- определяем допустимый уровень установки стоплосс для позиции buy
               double minimal= SymbolInfoDouble ( _Symbol , SYMBOL_BID )- _Point * SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_STOPS_LEVEL );
               //--- нормализация значения
               sl= NormalizeDouble (sl, _Digits );
               //--- нормализация значения
               minimal= NormalizeDouble (minimal, _Digits );
               //--- если на полученный от индикатора уровень невозможно установить стоплосс, 
               //    он будет установлен на ближайший возможный уровень
               sl= MathMin (sl,minimal);
               //--- значение стоплосс позиции
               double possl= PositionGetDouble ( POSITION_SL );
               //--- нормализация значения
               possl= NormalizeDouble (possl, _Digits );
               //--- если новое значение стоплосс выше, чем текущее значение стоплосс, 
               //    будет выполнена попытка переместить стоплосс на новый уровень
               if (sl>possl|| possl== 0 )
                 {
                   //--- заполнение структуры запроса
                  m_request.sl=sl;
                   //--- заполнение структуры запроса
                  m_request.tp= PositionGetDouble ( POSITION_TP );
                   //--- запрос
                   OrderSend (m_request,m_result);
                   //--- проверка результата выполнения запроса
                   if (m_result.retcode!= TRADE_RETCODE_DONE )
                    {
                     //--- вывод в журнал сообщения об ошибке 
                     printf ( "Не удалось переместить стоплосс позиции %s, ошибка: %I64u" , _Symbol ,m_result.retcode);
                     //--- не удалось переместить стоплосс, завершаем выполнение
                     //return(false);
                    }
                 }
              }
           
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
              {
               sl=SellStoploss;
               //--- прибавляется спред, поскольку sell закрывается по цене Ask
               sl+=( SymbolInfoDouble ( _Symbol , SYMBOL_ASK )- SymbolInfoDouble ( _Symbol , SYMBOL_BID ));
               double minimal= SymbolInfoDouble ( _Symbol , SYMBOL_ASK )+ _Point * SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_STOPS_LEVEL );
               sl= NormalizeDouble (sl, _Digits );
               minimal= NormalizeDouble (minimal, _Digits );
               sl= MathMax (sl,minimal);
               double possl= PositionGetDouble ( POSITION_SL );
               possl= NormalizeDouble (possl, _Digits );
               if (sl<possl || possl== 0 )
                 {
                  m_request.sl=sl;
                  m_request.tp= PositionGetDouble ( POSITION_TP );
                   OrderSend (m_request,m_result);
                   if (m_result.retcode!= TRADE_RETCODE_DONE )
                    {
                     printf ( "Не удалось переместить стоплосс позиции %s, ошибка: %I64u" , _Symbol ,m_result.retcode);
                     //return(false);
                    }
                 }
              }
           }  
  }
//+------------------------------------------------------------------+
 
hata nedir?
 
Khomtchenko :

Durdurma kaybının boyutunu 200 puana değiştiren bir komut dosyası yaptım, ancak durağı hareket ettirmek yerine bir şeyler yanlış

Puan olarak her yerde sl var ama fiyatlarda buna ihtiyacınız var.
 
Anladım. yapmaya çalışacağım
 

Burada. Basitleştirildi ve betiğin ne yapmaya çalıştığı SL ve TP hakkında bir mesaj eklendi. Duraklar zaten fiyatlarda

 //+------------------------------------------------------------------+
//|                                                      traling.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
double Stoploss= 0.00200 ;
double TP= 0.01200 ;
double sl,tp;
double ask; 
double bid; 
void OnStart ()
  {
//---
MqlTradeRequest m_request;
MqlTradeResult m_result;
MqlTick last_tick;
 SymbolInfoTick ( _Symbol ,last_tick);
 ask=last_tick.ask;
 bid=last_tick.bid;
 if ( PositionSelect ( _Symbol ))
           {
             //--- если позиция buy
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
              {
                  sl=ask-Stoploss;
                   NormalizeDouble (sl, _Digits );
                  m_request.sl=sl;
                  tp=ask+TP;
                   NormalizeDouble (tp, _Digits );
                   //sl=ask-sl;
                  m_request.tp=tp;
                   Alert ( "SL=" ,sl, " TP=" ,tp);
                   if ( OrderSend (m_request,m_result)) Alert ( "ok" );
                  
                 }
              
           
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
              {
               sl=bid+Stoploss;
               NormalizeDouble (sl, _Digits );
                  m_request.sl=sl;
                  tp=bid-TP;
                   NormalizeDouble (tp, _Digits );
                  m_request.tp=tp;
                   Alert ( "SL=" ,sl, " TP=" ,tp);
                   if ( OrderSend (m_request,m_result)) Alert ( "ok" );
                  
                 
              }
            }
  }
//+------------------------------------------------------------------+

Ama hiçbir şey olmadı

 

Herkese merhaba. Lütfen bana böyle bir sistem için bir danışman olup olmadığını söyleyin.

Sanırım buna "trend takip eden" deniyor

• kapanış fiyatı son 20 bar için maksimum fiyattan yüksekse uzun bir pozisyon açarız;

• kapanış fiyatı son 10 bar için minimum fiyatın altındaysa uzun bir pozisyonu kapatırız;

• kapanış fiyatı son 20 bar için minimum fiyatın altındaysa kısa pozisyon açarız;

• Kapanış fiyatı son 10 bar için maksimum fiyattan yüksekse bir kısa pozisyonu kapatırız.

Ya da belki iyi insanlar onu yazmaya yardımcı olur?

 
papaklass :

Durdurma değişikliği, belirli alanların isteğe dahil edilmesini gerektirir:

Böyle bir talepten sonra durağınız değişmelidir.

Evet. Ama merak ediyorum, yeni durakların neden kaymaya ihtiyacı var?
 

Bir sorum var, onun için ayrı bir konu oluşturmadım, umarım yazar gücenmez ve sorunun kendisi kaybolmaz.

Ticaret sinyallerinin Modülleri hakkında soru - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal ve örneğin, MACD sinyallerinin tanımını alalım " Diverjans , osilatörün ilk analiz edilen alt kısmıdır, daha küçüktür öncekinden ve karşılık gelen fiyat dibi öncekinden daha derin " - bu sinyalin nasıl arandığının koduna bakmak ilginç, SignalMACD.mqh dosyasını açın ve orada IS_PATTERN_USAGE(0) koşulları yerine üzerinde.

Sapmanın kendisinin nasıl arandığı koda nasıl bakılır? Yani, bir mumun diğer bir göstergeyle karşılaştırılması, bir çubukta diğerinde neye benziyor, bu kod nerede?

Документация по MQL5: Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов
Документация по MQL5: Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов
  • www.mql5.com
Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов - Документация по MQL5
 

Gerçek hesaplardaki bazı DC'ler, sembol adlarına "." gibi her türlü önek atar. veya "FXF".

Bu önekleri nasıl değiştirebilirim?

şöyle yaptım:

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD"DEF_SPEC ... - bu çalışmıyor

string SymbolsTrade[] = {"AUDCAD"+DEF_SPEC ... - ve bu da çalışmıyor

sonuç olarak, istenen AUDCADFXF yerine sadece FXF alıyorum.

Bana nasıl uygulanacağını söyleme?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
TG :

Bir sorum var, onun için ayrı bir konu oluşturmadım, umarım yazar gücenmez ve sorunun kendisi kaybolmaz.

Ticaret sinyallerinin Modülleri hakkında soru - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal ve örneğin, MACD sinyallerinin tanımını alalım " Diverjans , osilatörün ilk analiz edilen alt kısmıdır, daha küçüktür öncekinden ve karşılık gelen fiyat dibi öncekinden daha derin " - bu sinyalin nasıl arandığının koduna bakmak ilginç, SignalMACD.mqh dosyasını açın ve orada IS_PATTERN_USAGE(0) koşulları yerine üzerinde.

Sapmanın kendisinin nasıl arandığı koda nasıl bakılır? Yani, bir mumun diğer bir göstergeyle karşılaştırılması, bir çubukta diğerinde neye benziyor, bu kod nerede?

Kodu kaynakta görebilirsiniz. Sapma aramak için iki yöntem kullanılır:

1. Yöntem bool CsignalMACD::ExtState(int ind) - veriyi arama için hazırlar;

2. Yöntem bool CsignalMACD::CompareMaps(int map,int count,bool minimax,int start) - belirtilen parametrelerle bir piyasa modeli arar.

Yardımcı olursa, Rusça'daki yöntemlere yapılan yorumlar şunlardır:

bool yöntemi için CsignalMACD::ExtState(int ind)

 //--- результатом работы этого метода является битовая карта экстремумов
//--- фактически, битовая карта экстремумов представляет собой "массив" 4-битовых полей
//--- каждый "элемент массива" однозначно описывает соотношение
//--- текущих экстремумов осцилятора и цены с предыдущими
//--- назначение битов элемента анализируемой битовой карты
//--- бит 3 - не используется (всегда 0)
//--- бит 2 - имеет значение 1 если текущий экстремум осцилятора "экстремальней" предыдущего
//---         (более высокий пик или более глубокая впадина), иначе 0
//--- бит 1 - не используется (всегда 0)
//--- бит 0 - имеет значение 1 если текущий экстремум цены "экстремальней" предыдущего
//---         (более высокий пик или более глубокая впадина), иначе 0
//--- кроме того, формируются:
//--- массив значений экстремумов осцилятора,
//--- массив значений экстремумов цены и
//--- массив "расстояний" между экстремумами осцилятора (в барах)
//--- следует отметить, что при использовании результатов расширенной проверки состояния,
//--- нужно учитывать, какой экстремум осцилятора (пик или впадина)
//--- является "точкой отсчёта" (т.е. был обнаружен при анализе первым)
//--- если первым был обнаружен пик, то чётные элементы всех массивов
//--- будут содержать данные о пиках, нечётный данные о впадинах
//--- если первой была обнаружена впадина, соответственно, наоборот

bool CsignalMACD::CompareMaps(int map,int count,bool minimax,int start) yöntemi için

 //--- битовая карта образца представляет собой "массив" 4-битовых полей
//--- каждый "элемент массива" однозначно описывает искомое соотношение
//--- текущих экстремумов осцилятора и цены с предыдущими
//--- назначение битов элемента образца битовой карты
//--- бит 3 - имеет значение 1 если нам неважно соотношение экстремумов осцилятора
//---         имеет значение 0 если мы хотим "найти" соотношение экстремумов осцилятора определённое значением бита 2
//--- бит 2 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора "экстремальней" предыдущего
//---         (текущий пик более высокий или текущая впадина более глубокая)
//---         имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)
//--- бит 1 - имеет значение 1 если нам неважно соотношение экстремумов цены
//---         имеет значение 0 если мы хотим "найти" соотношение экстремумов цены определённое значением бита 0
//--- бит 0 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум цены "экстремальней" предыдущего
//---         (текущий пик более высокий или текущая впадина более глубокая)
//---         имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)