Помогите скрипт подкрутить,что бы значит открывал сделку немедленно,по текущей цене с рынка. А то чёт,я уже запарился Растояние от рына в 5 пипок не устраивает,а так что бы хотя бы с отклонением в своп.
Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
в индикаторе Fractals. Если я правильно думаю - индикатор показывает значение экстремума среди пяти баров с условием, что максимумы двух предыдущих и двух последующих баров (для случая фрактала вверх) меньше (хотя на графике "птичка" фрактала отображается и когда максимум крайнего левого бара из этих пяти = экстремуму ...... а не меньше его). Так зачем тогда shift ? Что тогда будет выдаваться, если его поставить не = 3, а = 2 или 5 ?
Составил вот такой код по входу в рынок после пробития первого фрактала после излома МА. Но при проверке на тестировании открывает сделки не везде, хотя по условию, вроде, должен. Никак не могу понять, что не так ? В реальном режиме (проверяя на М1 не могу найти ошибку).
externint Period_MA = 5, // Период расчётной МА
PERIOD=1, // Период текущего графика (таймфрейм)
MODE=3, // Метод усреднения из методов скользящего среднего
PRICE_TYPE=0, // Используемая цена из ценовых констант
Прибыль=10,
Ограничение=55;
double
upfractal,
dwfractal,
SL[10001]={0,,10000},
TP[10001]={0,,10000};
bool Двверх=false,
Дввниз=false,
Сделкавверх=false,
Сделкавниз=false;
int A, // Переменная массива вверх
B, // Переменная массива вниз
BarTime, // Время текущего бара
ticketup, // Ордер вверх
ticketdown, // Ордер вниз
Tвверх, // Время сделки вверх
Tвниз; // Время сделки вниз;color вверх = SpringGreen, // Цвет сделки вверх
вниз = Red; // Цвет сделки вниз int start()
{
string Symb=Symbol(); // Финанс. инструментdouble Lot=0.01; // Лотif(BarTime!=Time[0]) // Условие для того, чтобы программа считала только на начале бара, а не на каждом тике
{
double MA_1 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 1);
double MA_2 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 2);
double MA_3 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 3);
double MA_4 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 4);
double MA_5 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 5);
double MA_6 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 6);
double MA_7 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 7);
double MA_8 = iMA(Symbol(),PERIOD,Period_MA,0,MODE, PRICE_TYPE, 8);
//--------------------------------------------------------------------if(NormalizeDouble(MA_8,Digits)>NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_7,Digits)>=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_6,Digits)>=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_5,Digits)>=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_3,Digits)>=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_4,Digits)>=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_2,Digits)<NormalizeDouble(MA_1,Digits)) // Перелом вверх
{
Двверх=true;
Alert("Двверх");
Дввниз=false;
Сделкавниз=false;
dwfractal=0;
upfractal=0;
}
if(Двверх==true)
{
upfractal=iFractals(Symbol(), PERIOD, MODE_UPPER, 3);
Alert("upfractal вначале = ",upfractal);
}
if(NormalizeDouble(MA_8,Digits)<NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_7,Digits)<=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_6,Digits)<=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_5,Digits)<=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_3,Digits)<=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_4,Digits)<=NormalizeDouble(MA_2,Digits)
&& NormalizeDouble(MA_2,Digits)>NormalizeDouble(MA_1,Digits)) // Перелом вниз
{
Дввниз=true;
Двверх=false;
Alert("Дввниз");
Сделкавверх=false;
upfractal=0;
dwfractal=0;
}
if(Дввниз==true)
{
dwfractal=iFractals(Symbol(),PERIOD, MODE_LOWER, 3);
Alert("dwfractal вначале = ",dwfractal);
}
BarTime=Time[0];
}else// На каждый тик
{
Alert("upfractal на тиках = ",upfractal,", Bid = ", Bid);
if (Двверх==true && upfractal !=0 && Bid > NormalizeDouble(upfractal+1*Point,Digits) && Tвверх!=Time[0] && Сделкавверх==false) // Открытие ордеров при пробитии последнего (свежайшего) фрактала }
{
Alert("upfractal = ",upfractal, ", Ask = ",Ask);
Tвверх=Time[0];
while(true) // Цикл открытия орд.
{
A++;
SL[A]=Bid-Ограничение*Point;
TP[A]=Bid+7*Point+Прибыль*Point;
ticketup=OrderSend(Symb, OP_BUY, Lot, Ask,0, SL[A], TP[A],NULL,A,0,вверх); // Ордер вверхint Error=GetLastError();
switch(Error) // Преодолимые ошибки
{
case6: Alert("Нет связи с торговым сервером. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеSleep(1); // Задержка в цикле до нового тикаcontinue; // На след. итерацию
}
break; // Выход из цикла
}
Сделкавверх=true;
}
Alert("dwfractal на тиках = ",dwfractal,", Bid = ", Bid);
if (Дввниз==true && dwfractal !=0 && Bid < NormalizeDouble(dwfractal-1*Point,Digits) && Tвниз!=Time[0] && Сделкавниз==false) // Открытие ордеров при пробитии последнего (свежайшего) фрактала }
{
Alert("dwfractal = ",dwfractal, ", Bid = ",Bid);
Tвниз=Time[0];
while(true) // Цикл открытия орд.
{
B++;
SL[B]=Bid+Ограничение*Point;
TP[B]=Bid-4*Point-Прибыль*Point;
ticketdown=OrderSend(Symb, OP_SELL, Lot, Bid,0, SL[B], TP[B],NULL,B,0,вниз); // Ордер вниз
Error=GetLastError();
switch(Error) // Преодолимые ошибки
{
case6: Alert("Нет связи с торговым сервером. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеSleep(1); // Задержка в цикле до нового тикаcontinue; // На след. итерацию
}
break; // Выход из цикла
}
Сделкавниз=true;
}
}
//----return(0);
}
//+------------------------------------------------------------------+
А пока не отладится в тестере, нет смысла ставить с ошибкой на оптимизацию. В чём же ошибка...?
Leonid82, High[1] - это цена хай на первой свечке. Для её получения достаточно сделать вот такой скрипт. И цена эта получается не из советника, а из терминала.
Я ВАС поздравляю !
Поздравлять Вас как раз надо. Хотя выстрел в воздух никому не мешает.
Поздравлять Вас как раз надо. Хотя выстрел в воздух никому не мешает.
Виктор, у тя скайп что ли барахлит, иль связь помирает? Что там про ЗЗ ?
Да говорю, может ЗЗ сделать специальный. А скайп не мой помирает. У меня ты зелененький
Истории нету, или ошибки в истории
Добрый вечер !
Что-то не могу понять смысл
в индикаторе Fractals. Если я правильно думаю - индикатор показывает значение экстремума среди пяти баров с условием, что максимумы двух предыдущих и двух последующих баров (для случая фрактала вверх) меньше (хотя на графике "птичка" фрактала отображается и когда максимум крайнего левого бара из этих пяти = экстремуму ...... а не меньше его). Так зачем тогда shift ? Что тогда будет выдаваться, если его поставить не = 3, а = 2 или 5 ?
Составил вот такой код по входу в рынок после пробития первого фрактала после излома МА. Но при проверке на тестировании открывает сделки не везде, хотя по условию, вроде, должен. Никак не могу понять, что не так ? В реальном режиме (проверяя на М1 не могу найти ошибку).
А пока не отладится в тестере, нет смысла ставить с ошибкой на оптимизацию. В чём же ошибка...?Leonid82 24.01.2011 19:51
Привет! Имеется эксперт работающий с EURUSD. Как из этого эксперта получить High[1] по GBPUSD например?
Благодарю за помощь.
Leonid82, High[1] - это цена хай на первой свечке. Для её получения достаточно сделать вот такой скрипт. И цена эта получается не из советника, а из терминала.