[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 28
Vous avez demandé la possibilité d'énumérer et d'optimiser par programme les TFs possibles pour obtenir leurs valeurs d'indicateur dans le Conseiller Expert. Cela est possible de la manière suivante - par exemple
Voici quelques extraits de code du conseiller expert dans le fichier où cette opération est effectuée - tout y est décrit avec des commentaires.
Peut-être que quelqu'un d'autre pourrait trouver cela utile.
Merci ! Jusqu'à présent, j'ai modifié les valeurs des TF manuellement (l'optimisation est longue et l'analyse de chaque TF est effectuée séparément).
Et voici une autre question pour tous ceux qui peuvent aider. Le code pour les variantes de fractales non-standard et pour la définition de signaux potentiels à partir de n'importe quelle bougie après la rupture de la MA (à cette conception, je peux définir le nombre de bougies dont j'ai besoin après la rupture). Mais.... ! L'optimisation ne "veut" pas aller...(( Si je règle l'optimisation pour un seul paramètre Period_MA de 3 à 5 en un an, cela prend plus de quelques minutes. Si je règle de 2 à 240, je peux oublier l'ordinateur ...... il se fige et ne vous donne aucune indication sur le temps que cela prend... Je ne parle même pas d'inclure le reste des paramètres - SL, TP, MODE, PRICE_TYPE - dans l'optimisation. S'il vous plaît, dites-moi, si je peux, ce qui ne va pas dans le code... ? Pourquoi l'optimisation ne se passe pas bien ? Le code fonctionne - vous pouvez le vérifier. Voici le code lui-même :
#include <stdlib.mqh>externint Period_MA = 5, // Период расчётной МА
ПрибыльФр=10, // Не меньше 4
HФр = 1, // Фильтр над фракталом
Ограничение=52,
PERIOD=1, // Период текущего графика (таймфрейм)
MODE=3, // Метод усреднения из методов скользящего среднего
PRICE_TYPE=0; // Используемая цена из ценовых константbool Fact_вверх = false, // Движения вверх нет
Fact_вниз = false, // Движения вниз нет
Buy = false, // Инициализация buystop
Sell = false,
ПервФрвверх=false,
ПервФрвниз=false;
color вверх = SpringGreen, // Цвет сделки вверх
вниз = Red, // Цвет сделки вниз
отмена = Yellow, // Цвет отмены сделки
Свеча1 C=Blue; // Цвет номера 1С свечиint ticketup, // Ордер вверх
ticketdown, // Ордер вниз
BarTime, // Время текущего бара
Tвверх, // Время сделки вверх
Tвниз, // Время сделки вниз
A, // Переменная массива вверх
B; // Переменная массива внизdouble SL,
TP,
PointX;
int init()
{
if(Digits==5 || Digits==3) PointX = Point * 10; // Корректировка Point под трёх- пятизнакif(Digits==4 || Digits==2) PointX = Point;
return(0);
}
//--------------------------------------------------------------------int start() // Спец. функция start
{
double MAC1, // Значение МА на n баре
MAC2, // Значение МА на следующей свече
Разность,
Lot=0.01; // Лотstring Symb=Symbol(), // Финанс. инструмент
С1 = "C1", // Текст для обозначения ордера
Пусто = " "; // Текст для обозначения ордераint n=1, // Номер свечи, с которой начинается проверка
Фр;
bool Движ_вниз = false,
Движ_вверх = false;
if(BarTime!=Time[0]) // Условие для того, чтобы программа считала только на начале бара, а не на каждом тике
{
//--------------------------------------------------------------------while(true) // Цикл по перебору свечей вверх до изгиба МА Синей
{
// Обращение к функции техн.инд. MA
MAC1 = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n); // Первая сравниваемая свеча
n++; // Переход на следующую свечу
MAC2 = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n); // Последующая сравниваемая свеча
Разность = (MAC1 - MAC2)/PointX; // Разница МА между соседними свечами//--------------------------------------------------------------------if (NormalizeDouble(Разность,Digits) >= 1 ) // Условие движения вверх
{
Движ_вверх = true;
Движ_вниз = false;
ПервФрвниз=false;
}
if(NormalizeDouble(Разность,Digits)<-1) // Выход на противоположное движение break; // Выход из цикла while (перебора свечей)
} // Конец цикла while (перебора свечей)//--------------------------------------------------------------------if (Движ_вверх == true)
{
Print("Движ_вверх");
int Количество = OrdersTotal(); // Количество ордеров на данный момент for(int i=Количество-1; i>=0;i--) // Цикл перебора ордер
{
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий
{
int Tip=OrderType(); // Определения типа ордера//-------------------------------------------------------------------- switch(Tip) // Переключатель на типы ордеров
{
case5: int N = OrderTicket(); // Метка удаляемого ордера SELLSTOP
Закрыть(N); // Вызов функции удаления отложенного ордераcontinue;
}
}
}
for(i=2;i<=n-2;i++)
{
if(NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i+1],Digits)
&& NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i-1],Digits))
{
if(ПервФрвверх==false)
{
ПервФрвверх=true;
Фр=i;
}else
{
Фр=i;
}
}
if(NormalizeDouble(High[i],Digits)==NormalizeDouble(High[i+1],Digits)
&& NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i+2],Digits)
&& NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i-1],Digits))
{
if(ПервФрвверх==false)
{
ПервФрвверх=true;
Фр=i;
}else
{
Фр=i;
}
}
}
if (ПервФрвверх==true)
{
A++;
Print("n = ",n);
double ОткрФрвверх=High[Фр]+HФр*PointX;
SL=Bid-Ограничение*PointX;
TP=Bid+ПрибыльФр*PointX; // Заявленная цена TPint Ind_max =ArrayMaximum(High,n,0); // Индекс бара макс.ц. double max = High[Ind_max]; // Искомая макс ценаint Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL); // Мин. дистанцияint Время_фрактала=Time[Фр];
double Цена_рисунка=Open[Фр];
if (Tвверх!=Time[Фр]) // Если цена ещё не достигла ТP(при включении сов.)
{
Tвверх=Time[Фр]; // Определение времени для этого условия открытияwhile(true) // Цикл открытия орд.
{
ticketup=OrderSend(Symb, OP_BUY, Lot, Ask,0, SL, TP,NULL,A,0,вверх); // Ордер вверхint Error=GetLastError();
Print("Error = ",Error);
switch(Error) // Преодолимые ошибки
{
case6: Alert("Нет связи с торговым сервером. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеSleep(1); // Задержка в цикле до нового тикаcontinue; // На след. итерацию
}
break; // Выход из цикла
}
}
}
}
Je ne peux pas tout mettre ici. Je vais en rajouter.
Quel est le problème, pouvez-vous me dire qui sait... ?
//*********************************************************************************************************
n=1;
while(true) // Цикл по перебору свечей вниз до изгиба МА Синей
{
// Обращение к функции техн.инд.
MAC1 = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n); // Первая сравниваемая свеча
n++; // Переход на следующую свечу
MAC2 = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n); // Последующая сравниваемая свеча
Разность = (MAC1 - MAC2)/PointX; // Разница МА между соседними свечами//--------------------------------------------------------------------if (NormalizeDouble(Разность,Digits) <= -1 ) // Условие движения вниз
{
Движ_вниз = true;
Движ_вверх = false;
ПервФрвверх=false;
continue;
}
if(NormalizeDouble(Разность,Digits)>1) // Выход на противоположное движение break; //Выход из цикла while (перебора свечей)
} //Конец цикла while (перебора свечей)//-------------------------------------------------------------------- if (Движ_вниз == true)
{
Print("Движ_вниз");
Количество = OrdersTotal(); // Количество ордеров на данный момент for(i=Количество-1; i>=0;i--) // Цикл перебора ордер
{
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий
{
Tip=OrderType(); // Определения типа ордера//-------------------------------------------------------------------- switch(Tip) // Переключатель на типы ордеров
{
case4: N = OrderTicket(); // Метка удаляемого ордера BUYSTOP
Закрыть(N); // Вызов функции удаления отложенного ордераcontinue;
}
}
}
for(i=2;i<=n-2;i++)
{
if(NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i+1],Digits)
&& NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i-1],Digits))
{
if(ПервФрвниз==false)
{
ПервФрвниз=true;
Фр=i;
}else
{
Фр=i;
}
}
if(NormalizeDouble(Low[i],Digits)==NormalizeDouble(Low[i+1],Digits)
&& NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i+2],Digits)
&& NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i-1],Digits))
{
if(ПервФрвниз==false)
{
ПервФрвниз=true;
Фр=i;
}else
{
Фр=i;
}
}
}
if (ПервФрвниз==true)
{
B++;
Print("n = ",n);
double ОткрФрвниз=Low[Фр]-HФр*PointX;
SL=Bid+Ограничение*PointX-3*PointX;
TP=Bid-ПрибыльФр*PointX-3*PointX; // Заявленная цена TPint Ind_min =ArrayMinimum(Low,n,0); // Индекс бара мин.ц. double min = Low[Ind_min]; // Искомая мин цена
Время_фрактала=Time[Фр];
Цена_рисунка=Open[Фр];
if (Tвниз!=Time[Фр]) // Если цена ещё не достигла ТP(при включении сов.)
{
Tвниз=Time[Фр]; // Определение времени для этого условия открытияwhile(true) // Цикл открытия орд.
{
Alert("Bid = ",Bid);
ticketdown=OrderSend(Symb, OP_SELL, Lot, Bid,0, SL,TP,NULL,B,0,вниз); // Ордер вверх
Error=GetLastError();
Print("Error = ",Error);
switch(Error) // Преодолимые ошибки
{
case6: Alert("Нет связи с торговым сервером. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеSleep(1); // Задержка в цикле до нового тикаcontinue; // На след. итерацию
}
break; // Выход из цикла
}
}
}
}
BarTime=Time[0];
}
return(0); // Выход из start()
}
Faites une vérification supplémentaire pour le pourcentage.
à quel stade et le rapport entre quoi et quoi ?
mettre ceci dans start()
car cela ne fonctionnera pas dans init(),
peut-être vérifier Point ( ?
Je vais voir ce qui se passe...
à quel stade et le rapport entre quoi et quoi ?
mettre ceci dans start()
car cela ne fonctionnera pas dans init(),
peut-être vérifier Point( ?
Je vais voir ce qui se passe...
J'ai mis les chiffres avec le point dans print() car j'ai le même Expert Advisor fonctionnant sur quatre fenêtres, j'ai obtenu l'image suivante :
c'est-à-dire que trois fenêtres ont cinq chiffres, et une fenêtre a quatre chiffres, c'est donc un problème,
J'ai fermé toutes les fenêtres, les ai rouvertes, mis des conseillers partout avec cinq chiffres...
J'ai l'impression que ma société de courtage m'a trompé en ouvrant les fenêtres,
La question est close...
Vous avez demandé la possibilité d'énumérer et d'optimiser par programme les TFs possibles pour obtenir leurs valeurs d'indicateur dans le Conseiller Expert. Cela est possible de la manière suivante - par exemple
Voici quelques extraits de code du conseiller expert dans le fichier où cette opération est effectuée - tout y est décrit avec des commentaires.
Peut-être que quelqu'un d'autre pourrait trouver cela utile.
Merci ! Jusqu'à présent, j'ai modifié les valeurs des TF manuellement (l'optimisation est longue et l'analyse de chaque TF est effectuée séparément).
Et voici une autre question pour tous ceux qui peuvent aider. Le code pour les variantes de fractales non-standard et pour la définition de signaux potentiels à partir de n'importe quelle bougie après la rupture de la MA (à cette conception, je peux définir le nombre de bougies dont j'ai besoin après la rupture). Mais.... ! L'optimisation ne "veut" pas aller...(( Si je règle l'optimisation pour un seul paramètre Period_MA de 3 à 5 en un an, cela prend plus de quelques minutes. Si je règle de 2 à 240, je peux oublier l'ordinateur ...... il se fige et ne vous donne aucune indication sur le temps que cela prend... Je ne parle même pas d'inclure le reste des paramètres - SL, TP, MODE, PRICE_TYPE - dans l'optimisation. S'il vous plaît, dites-moi, si je peux, ce qui ne va pas dans le code... ? Pourquoi l'optimisation ne se passe pas bien ? Le code fonctionne - vous pouvez le vérifier. Voici le code lui-même :
Je ne peux pas tout mettre ici. Je vais en rajouter.
Quel est le problème, pouvez-vous me dire qui sait... ?
Ici :
Et la fin :
comment ou où insérez-vous les svetniki et les scripts ???
https://docs.mql4.com/ru/ les répertoires où est écrit ce qui est stocké
https://docs.mql4.com/ru/ les répertoires où est écrit ce qui est stocké
cp