Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//| 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 - торговля не ведется вобще.
Кстати: по фунт/доллару таких проблем нет, а только по евро/баксу. Другие валюты не проверял.
Делимость нацело надо каждый раз тщательно проверять. Странно, что в справке функция остатка от деления описана как вещественная, хотя по определению остаток есть целое число от деления двух целых чисел.
А ордера закрывать по OrderClose() дядя брокер будет?
Разбирайся. Думаю, конкретный ответ где-то рядом, ибо чудес не бывает. Например, можно поставить в сомнительные места инструкцию Print(...) и посмотреть вывод в журнал.
...
И т.д. Плюс обработка ошибок при операциях с ордерами - см. справку. Важно понимать, что сколько торговцев, столько и методик, и готовых конкретных рецептов тут нет и быть не может.
особенно alexjou - мир тесен...авось свидимся как-то :) Я добро помню хорошо :)