Нужна помощь в коррекции советника - страница 2

 
//+------------------------------------------------------------------+
//| Trade50.mq4 |
//| Copyright © 2006, Cherednichenko W. A |
//| http://www. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Cherednichenko W. A"
#property link "http://www."

#include <WinUser32.mqh>//для MessageBox()


extern double Step = 25;
extern double TakeProfit = 25;
extern double StartValue = 115.0;
extern double HighLevel01 = 300;
extern double LowLevel01 = 300;
extern double HighLevel02 = 400;
extern double LowLevel02 = 400;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
static bool run_once = false;
static int sym_digits;
if (run_once == false)
{
sym_digits = MarketInfo(Symbol(), MODE_DIGITS); // число разрядов после десятичной точки
run_once = true;
}

double ticket = 0;
int ttl = OrdersTotal();
int cnt = 0;
for( cnt=0;cnt<ttl;cnt++ ){
if( OrderSelect( cnt, SELECT_BY_POS ) == true)
{
if (Bid == OrderOpenPrice() ) return(0);
}
}
// RefreshRates();


if ( MathMod(Bid / Point,Step) == 0)
{
if ( (Bid < StartValue + HighLevel02 ) && (Bid > StartValue - LowLevel02)){
if ( Bid > StartValue + HighLevel01 ){
ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 0, NormalizeDouble(Bid - TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
return(0);
}
if ( Bid < StartValue - LowLevel01){
ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, NormalizeDouble(Ask + TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
return(0);
}
ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, NormalizeDouble(Ask + TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 0, NormalizeDouble(Bid - TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
}
}
return(0);
}
//+------------------------------------------------------------------+

Вот уже рабочий код советника, но по непонятным мне причинам при тестировании его ан коротком периоде 2206.02.09-2206.02.13 где цены достигалои уровней 1.1900, 1.1950, 1.2000 - он открыл токо 2 ордера по цене 1.1950. ну и естественно азкрыл их оба по профиту. Где тут собака зарыта?
 
а.... забыл уточнить - добавились новые диапазоны -
между 1 и 2 открываются только следующие ордера - вверху на продажу, внизу на покупку.
За пределдами диапазона 2 - торговля не ведется вобще.
 
почему-то если стаивть шаг=50 и профит тоже = 50, то октрываются ордера только на цене типа *.**50, а прицене *.**00 ничего не делается. Ну.. только профит фиксируется. Почему так происходит?
Кстати: по фунт/доллару таких проблем нет, а только по евро/баксу. Другие валюты не проверял.
 
почему-то если стаивть шаг=50 и профит тоже = 50, то октрываются ордера только на цене типа *.**50, а прицене *.**00 ничего не делается.

Делимость нацело надо каждый раз тщательно проверять. Странно, что в справке функция остатка от деления описана как вещественная, хотя по определению остаток есть целое число от деления двух целых чисел.
Ну.. только профит фиксируется.

А ордера закрывать по OrderClose() дядя брокер будет?
 
Мне бы поконкретней.... почему на фунт/долларе работает, а на евро/баксе - нет....?
 
Навскидку: Bid < StartValue + HighLevel02 и т.д. - какой порядок числа слева от знака < и какой справа? Надо все измерять в одних и тех же единицах - либо в пунктах, либо в действующих ценах. И придерживаться этого на протяжении всей программы.
Мне бы поконкретней.... почему на фунт/долларе работает, а на евро/баксе - нет....?

Разбирайся. Думаю, конкретный ответ где-то рядом, ибо чудес не бывает. Например, можно поставить в сомнительные места инструкцию Print(...) и посмотреть вывод в журнал.
...
И т.д. Плюс обработка ошибок при операциях с ордерами - см. справку. Важно понимать, что сколько торговцев, столько и методик, и готовых конкретных рецептов тут нет и быть не может.
 
Все... сделал... всем спасибо :)
особенно alexjou - мир тесен...авось свидимся как-то :) Я добро помню хорошо :)
Причина обращения: