Шаг за шагом (нужна помощь в написании эксперта) - страница 2

 
off:
Может оно и так . Учиться то надо. (3) пока не рассматривается.

А с поиском как?
 
Вот половинка только на продажу
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"
#define MAGICMA 20050610

extern double Lots = 0.1;
double UpFractals;
double DownFractals;

void CheckForOpen()
{
if(Volume[0]>1) return;
UpFractals=iFractals(NULL, 0, MODE_UPPER,2);
DownFractals=iFractals(NULL, 0, MODE_LOWER,2);
if(DownFractals != 0)
if(OrdersTotal()==0) OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[2]-0.0001,3,0,Low[2]-0. 0004,"",MAGICMA,0,Red);
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELLSTOP)
{
if(DownFractals >= OrderOpenPrice())
{
OrderModify(OrderTicket(),Low[2]-0.0001,0,Low[2]-0.0004,0,Blue);
break;
}
}
if(DownFractals != 0)
{
OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[2]-0.0001,3,0,Low[2]-0.0004,"", MAGICMA,0, Red);
break;
}
}
}

void start()
{
if(Bars<5 || IsTradeAllowed()==false) return;
CheckForOpen();
}



если поставить в тестере от 2007.05.01 до 2007.05.31
1 2007.05.15 08:10 sell stop 1 0.10 1.3535 0.0000 1.3532 0.00 10000.00
2 2007.05.15 08:55 modify 1 0.10 1.3548 0.0000 1.3545 0.00 10000.00
3 2007.05.15 09:07 sell 1 0.10 1.3548 0.0000 1.3545 0.00 10000.00
4 2007.05.15 09:21 t/p 1 0.10 1.3545 0.0000 1.3545 3.00 10003.00
5 2007.05.15 09:40 sell stop 2 0.10 1.3531 0.0000 1.3528 0.00 10003.00
6 2007.05.15 10:25 modify 2 0.10 1.3538 0.0000 1.3535 0.00 10003.00
7 2007.05.15 10:29 sell 2 0.10 1.3538 0.0000 1.3535 0.00 10003.00
8 2007.05.15 10:45 sell stop 3 0.10 1.3533 0.0000 1.3530 0.00 10003.00
9 2007.05.15 11:20 sell stop 4 0.10 1.3533 0.0000 1.3530 0.00 10003.00

В 9 пункте по идее должна быть модификация ордера, а не новое открытие EURUSD
 
В пункте 9 сработал второй оператор OrderSend. Непонятно зачем он там вообще нужен, если вам не нужно больше одного ордера sell.
 
 
Еще такой вопрос.Как можно проще написать такую проверку?

Если нет ордеров или есть определенный ордер ---> то выполняем то то

if(OrdersTotal()==0) то ...   Print "Устанавливаем ордер"                               
if(OrdersTotal()>0)
 {
  for(int i=0;i<OrdersTotal();i++)
   {
    OrderSelect
    if OrderType()==1   
    if OrderType()==2
    if OrderType()==3    Print "Устанавливаем ордер" 
     if OrderType()==4
    if OrderType()==5
    if OrderType()==6
  }
 
off:
Еще такой вопрос.Как можно проще написать такую проверку?

Если нет ордеров или есть определенный ордер ---> то выполняем то то

if(OrdersTotal()==0) то ... Print "Устанавливаем ордер"
if(OrdersTotal()>0)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect
if OrderType()==1
if OrderType()==2
if OrderType()==3 Print "Устанавливаем ордер"
if OrderType()==4
if OrderType()==5
if OrderType()==6
}




А где же if (OrderType()==0)

Речь идет о OP_BUY.

Еще вопрос. Если есть ордера на других валютах, то их нужно исключить из проверки. Вроде у KimIV все это есть. Посмотри в BASE

 
Спасибо ... буду разбираться.