Советник, который после запуска следил бы за курсом пятиминутного графика с условиями: - страница 7

 
int start()
{
if(OrdersTotal()!=0)  return;  

//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов
........


 
zhuki:
if(OrdersTotal()!=0) return;

А чужие ордера (по другим символам и с др. магиками) ??? В тестере покатит, но если на счету будет кроме этого советника что-то ещё, то корректнее так:

bool NmbrOfOpened(int Magic){
 
   int  _OrdersTotal=OrdersTotal();
 
   if (_OrdersTotal>0) {
       for (int i=0; i<_OrdersTotal; i++) {    
         OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if (OrderMagicNumber()==Magic && OrderSymbol()==Symbol()) {
            return(true);  break; 
         }
       }
   }
   else return(false); 
 return(false);
}

Функция вернёт ложь (false) если нет ни одной открытой позиции по текущему символу с заданным (переданным ей) магиком.

 
Уважаемый с такими выкладками Вы парня введёте в большое заблуждение,а читать описания он не умеет.
Представьте как он запутается ,я позтому и написал так чтобы ему понятнее было .
 
Очень кстати, я уже смекаю :))
Оба случая догнал, огромное человеческое спасибо.
 
Только с экспертом я так и невник, как работает функция Delta
Сделки срабатывают не при моих условиях
Delta=30
Это значит я хочу, чтобы эксперт открывал позицию +-30 в пунктах. А он открывает и при 5-10 пунктах при росте и при падении, не понятно....
 
Реально функция Delta работает не пойми как :(
Может есть какие то другие простые решения?
Я тут нарыл одну функцию
Distance
=30 // Расстояние от текущей цены до цены отложенных ордеров
Можно ли ее реализовать не только для отложенных ордеров?
Суть идеи прежняя: следить за текущим баром, за ценой его открытия и если от этой цены за время 5-мин бара цена либо вырастет, либо упадет, допустим на 30 пунктов расстояния от рынка открытия этого 5-мин бара, только тогда открывать позицию......
С отложенными ордерами моя стратегия не катит.....

 

А ты бы выложил сюда целиком свой код. И посмотрим, почему Дельта не работает..

 
//+------------------------------------------------------------------+
//|                                                Expert-000001.mq4 |
//|                                    Copyright © 2008, salesman*** |
//|                                         http://www.forexgrand.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, salesman***"
#property link      "http://www.forexgrand.ru"
#include <WinUser32.mqh>
#include <stdlib.mqh>
extern double StopLoss=30;                        // Stop Loss
extern double TakeProfit=3;                       // Take Profit
extern double Lots=0.5;                           // Объем сделки в %
extern double Slippage =3;                        // Максимальное отклонение от запрошенной цены
extern double MagicNumber=0;                      // Order ID
int  ticket;
int Delta=30;                                     // Сигнал приказа в пунктах
int TimeForSleep = 10;                            // Время для отдыха после сделки

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if(OrdersTotal()!=0)  return; //Выполнять только одну сделку.

//----
if (iOpen(NULL,0,0)-Ask>=Delta*Point) //Цена упала больше или = Delta пунктов
//Null-тек инструмент, 0-тек.график, 0-слежка за тек баром
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил",MagicNumber,11111,Green);

}
if (iOpen(NULL,0,0)-Bid<=Delta*Point) //Цена выросла больше или = Delta пунктов
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Продал",MagicNumber,22222,Green);
}
//----
return(0);
}




//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

Вот весь код целиком.....
 

Да, действительно. Не работает Дельта....

Видимо, тут нужно со знаками(полярностью) Дельты разобраться при покупке и при продаже, "ибо" в коде выше, например, при покупке величина (iOpen(NULL,0,0)-Ask всё время будет отрицательной. И сделка открывается сразу по цене открытия бара (iOpen(NULL,0,0)-Ask>=Delta...

Если так попробовать (покупка) -

if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла на больше или = Delta пунктов
 
т.е. в итоге надо потестить такой вариант:

int start()
{
if(OrdersTotal()!=0) return; //Выполнять только одну сделку.

//----
if (Bid - iOpen(NULL,0,0)<=Delta*Point) //Цена упала на меньше или = Delta пунктов
//Null-тек инструмент, 0-тек.график, 0-слежка за тек баром
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил",MagicNumber,11111,Green);

}
if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла на больше или = Delta пунктов
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Продал",MagicNumber,22222,Green);
}
//----
return(0);
}
Я правильно смекаю или перепутал Ask с Bid в строках:
if (Bid - iOpen(NULL,0,0)<=Delta*Point) //Цена упала на меньше или = Delta пунктов

if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла на больше или = Delta пунктов
Причина обращения: