Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 252
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
> err=StringToInteger((string)err)
это вообще должно войти в анналы ;-)
изначально в err вы очевидно получили int из GetLastError(). Сконвертировать код ошибки в читаемое описание ErrorDescription(err); при условии что включен #include <stdlib.mqh>.
а вот так как написано - это жесть
PS/ и не изучайте программирование по MQL. MQL что 4, что 5 всё-же целевые языки для конкретной платформы.
подскажите пожалуйста, можно ли так писать. не хочет сделок открывать. может формат расчётных чисел неправильный? или другие недочёты в коде?
double TakeLong(double shp)
{
int CurrentDayRange=0, FiveDayATR=0, take=0;
double TP_ATR=0;
//////Pivot inputs
double P, S1, R1, S2, R2, S3, R3;
double LastHigh, LastLow, x;
int counted_bars = IndicatorCounted();
int limit, i;
shp=iHigh(Symbol(),PERIOD_D1,0);
//---- Pivot indicator calculation
if(counted_bars == 0)
{
x = Period();
if(x > 240)
return(-1);
}
if(counted_bars < 0)
return(-1);
limit = (Bars - counted_bars) - 1;
//----
for(i = limit; i >= 0; i--)
{
if(High[i+1] > LastHigh)
LastHigh = High[i+1];
//----
if(Low[i+1] < LastLow)
LastLow=Low[i+1];
if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{
P = (LastHigh + LastLow + Close[i+1]) / 3;
R1 = (2*P) - LastLow;
S1 = (2*P) - LastHigh;
R2 = P + (LastHigh - LastLow);
S2 = P - (LastHigh - LastLow);
R3 = (2*P) + (LastHigh - (2*LastLow));
S3 = (2*P) - ((2* LastHigh) - LastLow);
LastLow = Open[i];
LastHigh = Open[i];
}
}
////ATR calculation
for (i=1;i<6;i++)
{ if(iHigh(NULL, PERIOD_D1, i)- iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}
FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());
CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));
if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; else TP_ATR=0;
if (Bid>R1 && TP_ATR==0) take=shp;
else if (Bid<R1 && R1<TP_ATR) take=R1;
else take=TP_ATR;
return(take);
}
Предложенный код похож на индикатор. А сделки открывает советник, или скрипт. Вызов функции OrderSend в индикаторе запрещен. Индикатор может сигналить - вставьте в соответствующее место вызов функции Alert или звук
Предложенный код похож на индикатор. А сделки открывает советник, или скрипт. Вызов функции OrderSend в индикаторе запрещен. Индикатор может сигналить - вставьте в соответствующее место вызов функции Alert или звук
это код определения TP, который отдаёт результат в OrderSend . без этого сложного алгоритма сделки отправляются, с ним никак. вызываю функцию TP = TakeLong(SHP);
Существует много способов отладки - процесса поиска ошибки, когда установлено, что она есть. Первый - F5 - начать отладку в MetsEditor. 2) с помощью Алертов проследить выполнение. 3 и 4) вывод отладочной информации в текстовые метки и функцией Comment. Выберите удобный для Вас способ и отладьте эту простенькую функцию - тогда Вы станете программистом. Сложной считается программа с тысячами строк.
подскажите пожалуйста, можно ли так писать. не хочет сделок открывать. может формат расчётных чисел неправильный? или другие недочёты в коде?
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
В полном коде это выглядит так:
double Close1 = iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1);
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}
Правильно сделано? Как заставить это работать?
На демо счете М1 пробовали? Что получается?
На демо счете М1 пробовали? Что получается?
Подскажите, почему трал срабатывает на каждом тике ?