#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; // Выход из цикла
}
}
}
}
//*********************************************************************************************************
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()
}
做一个额外的百分比检查。
在什么阶段,什么与什么的比例?
把这个放在start()中
因为它在init()中不起作用。
也许检查一下Point(?
我将看看会发生什么...
在什么阶段,什么与什么的比例?
把这个放在start()中
因为它在init()中不起作用。
也许检查一下Point(?
我将看看会发生什么...
我在print()中加入了带点的数字,因为我在四个窗口上运行同一个专家顾问,我得到了以下图片。
即三个窗口有五位数,一个窗口有四位数,所以这是一个故障。
我关闭了所有的窗户,重新打开,把顾问到处都是五位数......。
我觉得我的经纪公司在我打开窗户时作弊了。
这个问题已经结束了...
你问的是能否以编程方式列举和优化可能的TF,以便在专家顾问中获得其指标值。这可以通过以下方式实现--例如
下面是执行该操作的文件中专家顾问的一些代码片断--那里的一切都有注释描述。
也许其他人会发现它很有用。
谢谢你!到目前为止,我已经手动改变了TF值(优化是一个漫长的过程,每个TF的结果都是单独分析的)。
这里还有一个问题,请大家帮忙解答。用于非标准分形的变体和定义突破MA后的任何蜡烛的潜在信号的代码(在这样的设计中,我可以定义我需要的突破后的蜡烛数量)。But....!优化不 "想 "走......((如果我只为一个参数Period_MA 在一年内从3到5设置优化,它走的时间超过了几分钟。如果我从2设置到240,我可以忘记电脑.....。它冻结了,而且不给你任何指示需要多长时间......我甚至没有说要把其余的参数--SL、TP、MODE、PRICE_TYPE--纳入优化。请告诉我,如果可以的话,代码中有什么问题...?为什么优化工作进展不顺利?该代码是有效的--你可以检查一下。下面是代码本身。
我不能把所有的东西都放在这里,我会再加进去的。
有什么问题,你能告诉我谁知道......?
在这里:
而结局......。
你如何或在哪里插入svetniki和脚本?
https://docs.mql4.com/ru/ 存储的内容被写入的目录。
https://docs.mql4.com/ru/ 存储的内容被写入的目录。
cp