Ho fatto uno script che cambia la dimensione dello stop loss a 200 pips, ma c'è un errore invece di spostare lo stop
//+------------------------------------------------------------------+//| 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;
voidOnStart()
{
//---MqlTradeRequest m_request;
MqlTradeResult m_result;
if(PositionSelect(_Symbol))
{
//--- если позиция buyif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
//--- получаем значение стоплосс для позиции buy
sl=BuyStoploss;
//--- определяем допустимый уровень установки стоплосс для позиции buydouble 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);
}
}
}
}
}
//+------------------------------------------------------------------+
Ciao a tutti. Potete dirmi se esiste un Expert Advisor per questo sistema?
Credo che si chiami "seguire la tendenza".
- La posizione lunga sarà aperta se il prezzo di chiusura è superiore al prezzo massimo delle ultime 20 barre;
- chiudere una posizione lunga se il prezzo di chiusura è inferiore al prezzo minimo delle ultime 10 barre;
- aprire una posizione corta se il prezzo di chiusura è inferiore al prezzo minimo delle ultime 20 barre; chiudere una posizione corta se il prezzo di chiusura è inferiore al prezzo minimo delle ultime 10 barre
- chiudere una posizione corta se il prezzo di chiusura è superiore al prezzo massimo delle ultime 10 barre.
O forse le persone gentili possono aiutarti a scriverlo?
Ho una domanda, non ho deciso di creare un thread separato per questo, spero che l'autore non si offenda e che la domanda non vada persa.
La domanda riguarda i Trading Signal Modules - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal e prendiamo per esempio la descrizione dei segnali MACD"Divergenza - il primo trough dell'oscillatore analizzato è meno profondo del precedente e il trough del prezzo corrispondente è più profondo del precedente" - è interessante guardare il codice come viene cercato questo segnale. Apriamo SignalMACD.mqh ma ci sono invece le condizioni IS_PATTERN_USAGE(0) e così via.
Come posso vedere il codice di come viene cercata la divergenza stessa? Cioè, come fa a confrontare una candela con un altro indicatore su una barra all'altra, dov'è questo codice?
Ho una domanda, spero che l'autore non si offenda e che la domanda non vada persa.
La domanda riguarda i Trading Signal Modules - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal e prendiamo per esempio la descrizione dei segnali MACD"Divergenza - il primo trough dell'oscillatore analizzato è meno profondo del precedente e il trough del prezzo corrispondente è più profondo del precedente" - è interessante guardare il codice come viene cercato questo segnale. Apriamo SignalMACD.mqh ma ci sono invece le condizioni IS_PATTERN_USAGE(0) e così via.
Come posso vedere il codice di come viene cercata la divergenza stessa? Cioè, come è il confronto di una candela con un altro indicatore su una barra, dove si trova questo codice?
Potete vedere il codice nel codice sorgente. Ci sono due metodi per cercare la divergenza:
1. Il metodo bool CSignalMACD::ExtState(int ind) - prepara i dati per la ricerca;
2. Il metodo bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) cerca un modello di mercato con i parametri specificati.
Se aiuta, ecco i commenti ai metodi in russo:
Per il metodo bool CSignalMACD::ExtState(int ind)
//--- результатом работы этого метода является битовая карта экстремумов//--- фактически, битовая карта экстремумов представляет собой "массив" 4-битовых полей//--- каждый "элемент массива" однозначно описывает соотношение//--- текущих экстремумов осцилятора и цены с предыдущими//--- назначение битов элемента анализируемой битовой карты//--- бит 3 - не используется (всегда 0)//--- бит 2 - имеет значение 1 если текущий экстремум осцилятора "экстремальней" предыдущего//--- (более высокий пик или более глубокая впадина), иначе 0//--- бит 1 - не используется (всегда 0)//--- бит 0 - имеет значение 1 если текущий экстремум цены "экстремальней" предыдущего//--- (более высокий пик или более глубокая впадина), иначе 0//--- кроме того, формируются://--- массив значений экстремумов осцилятора,//--- массив значений экстремумов цены и//--- массив "расстояний" между экстремумами осцилятора (в барах)//--- следует отметить, что при использовании результатов расширенной проверки состояния,//--- нужно учитывать, какой экстремум осцилятора (пик или впадина)//--- является "точкой отсчёта" (т.е. был обнаружен при анализе первым)//--- если первым был обнаружен пик, то чётные элементы всех массивов//--- будут содержать данные о пиках, нечётный данные о впадинах//--- если первой была обнаружена впадина, соответственно, наоборот
Per il metodo bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)
//--- битовая карта образца представляет собой "массив" 4-битовых полей//--- каждый "элемент массива" однозначно описывает искомое соотношение//--- текущих экстремумов осцилятора и цены с предыдущими//--- назначение битов элемента образца битовой карты//--- бит 3 - имеет значение 1 если нам неважно соотношение экстремумов осцилятора//--- имеет значение 0 если мы хотим "найти" соотношение экстремумов осцилятора определённое значением бита 2//--- бит 2 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора "экстремальней" предыдущего//--- (текущий пик более высокий или текущая впадина более глубокая)//--- имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора менее "экстремальный" чем предыдущий//--- (текущий пик менее высокий или текущая впадина менее глубокая)//--- бит 1 - имеет значение 1 если нам неважно соотношение экстремумов цены//--- имеет значение 0 если мы хотим "найти" соотношение экстремумов цены определённое значением бита 0//--- бит 0 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум цены "экстремальней" предыдущего//--- (текущий пик более высокий или текущая впадина более глубокая)//--- имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий//--- (текущий пик менее высокий или текущая впадина менее глубокая)
Ho fatto uno script che cambia la dimensione dello stop loss a 200 pips, ma c'è un errore invece di spostare lo stop
Ho fatto uno script che cambia la dimensione dello stop loss a 200 pips, ma c'è un errore invece di spostare lo stop
Qui. Semplificato e aggiunto un messaggio su cosa SL e TP lo script sta cercando di fare. Le fermate sono già nei prezzi
Ma non succede niente.
Credo che si chiami "seguire la tendenza".
- La posizione lunga sarà aperta se il prezzo di chiusura è superiore al prezzo massimo delle ultime 20 barre;
- chiudere una posizione lunga se il prezzo di chiusura è inferiore al prezzo minimo delle ultime 10 barre;
- aprire una posizione corta se il prezzo di chiusura è inferiore al prezzo minimo delle ultime 20 barre; chiudere una posizione corta se il prezzo di chiusura è inferiore al prezzo minimo delle ultime 10 barre
- chiudere una posizione corta se il prezzo di chiusura è superiore al prezzo massimo delle ultime 10 barre.
O forse le persone gentili possono aiutarti a scriverlo?
La modifica degli arresti richiede l'inclusione di alcuni campi nella query:
È qui che la vostra fermata dovrebbe cambiare dopo una tale richiesta.
Ho una domanda, non ho deciso di creare un thread separato per questo, spero che l'autore non si offenda e che la domanda non vada persa.
La domanda riguarda i Trading Signal Modules - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal e prendiamo per esempio la descrizione dei segnali MACD"Divergenza - il primo trough dell'oscillatore analizzato è meno profondo del precedente e il trough del prezzo corrispondente è più profondo del precedente" - è interessante guardare il codice come viene cercato questo segnale. Apriamo SignalMACD.mqh ma ci sono invece le condizioni IS_PATTERN_USAGE(0) e così via.
Come posso vedere il codice di come viene cercata la divergenza stessa? Cioè, come fa a confrontare una candela con un altro indicatore su una barra all'altra, dov'è questo codice?
Alcuni DC nei conti reali assegnano ogni sorta di prefissi come "." o "FXF" ai nomi dei simboli.
Come posso usare questi prefissi?
L'ho fatto in questo modo:
#define DEF_SPEC "FXF"
stringa SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -non funziona
stringa SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -non funziona nemmeno così
come risultato ottengo solo FXF invece di AUDCADFXF.
Puoi dirmi come si fa?
Ho una domanda, spero che l'autore non si offenda e che la domanda non vada persa.
La domanda riguarda i Trading Signal Modules - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal e prendiamo per esempio la descrizione dei segnali MACD"Divergenza - il primo trough dell'oscillatore analizzato è meno profondo del precedente e il trough del prezzo corrispondente è più profondo del precedente" - è interessante guardare il codice come viene cercato questo segnale. Apriamo SignalMACD.mqh ma ci sono invece le condizioni IS_PATTERN_USAGE(0) e così via.
Come posso vedere il codice di come viene cercata la divergenza stessa? Cioè, come è il confronto di una candela con un altro indicatore su una barra, dove si trova questo codice?
Potete vedere il codice nel codice sorgente. Ci sono due metodi per cercare la divergenza:
1. Il metodo bool CSignalMACD::ExtState(int ind) - prepara i dati per la ricerca;
2. Il metodo bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) cerca un modello di mercato con i parametri specificati.
Se aiuta, ecco i commenti ai metodi in russo:
Per il metodo bool CSignalMACD::ExtState(int ind)
Per il metodo bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)