Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 375

 
okidoki543:
Если кто-то захочет помочь мне (см. выше), я открыт для сотрудничества.
На коммерческой основе - не вопрос, очередь желающих помочь выстроится. А так... начинайте писАть сами, и помощь придёт.
 
Ekburg:

вместо sl поставьте OrderStopLoss()


не помогло...

void VirtualTral(int Dist_Tral,int Start_Tral,int Magic,int SL)
{

double dist=Dist_Tral;
double start=Start_Tral;
double priceopen=OrderOpenPrice();
double sl=OrderStopLoss();
 
if(OrdersTotal()<=0)
ObjectDelete("Stop"); 

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {  

       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {                    
                sl=NormalizeDouble(Bid-dist*Point,Digits);
                Print(+sl);
                ObjectCreate("Stop",OBJ_HLINE,0,D'2013.02.20 12:30',sl);                                                         
                ObjectSet("Stop",OBJPROP_STYLE,1);                                                                                         
                ObjectMove("Stop",0,D'2013.02.20 12:30',sl);                                                                                                 
                if (NormalizeDouble(sl*Point,Digits) >=Bid)
             {
                Print("Закрываем");
                OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue);
             }
         }               
      }
   }
}

вроде должно работать, но что то не учтено..

 
alexey1979621:
Да теперь открывает, но целую кучу сделок, а мне нужно, чтобы по заданным парам, скажем по EURAUD и AUDUSD открывались только две сделки.

Алгоритм проще валенка:

1. Если на ЕвроАуди нет позиций - открыть позицию,

2. Если на АудиБакс нет позиции - открыть позицию.

 
vadynik:


не помогло...

вроде должно работать, но что то не учтено..

priceopen разве не нужно в цикле брать уже после выделения ордера?
 
artmedia70:

Алгоритм проще валенка:

1. Если на ЕвроАуди нет позиций - открыть позицию,

2. Если на АудиБакс нет позиции - открыть позицию.


Нет, Артемида, применительно к моей ситуации так не прокатит.
extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


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

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}

 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
 
   return(0);
  }
 
alexey1979621:
Нет, Артемида, применительно к моей ситуации так не прокатит.


В цикле пересчитать позиции в зависимости от символа и магика.

А это что ещё за прикол: OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);


З.Ы.: Артемида не Artemida a

Artmedia

 
evillive:


В цикле пересчитать позиции в зависимости от символа и магика.

А это что ещё за прикол: OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);


З.Ы.: Артемида не Artemida a

Artmedia


Да ладно, я уже привык, что все обзываются ... пофиг ...

Вообще-то цена закрытия в данной функции раньше прокатывала нормально. Компилятор сам впихивал нужную цену. Недавно тут у кого-то это вызывало ошибку.

 
artmedia70:

Да ладно, я уже привык, что все обзываются ... пофиг ...

Пора ник менять?
 
alexey1979621:
Нет, Артемида, применительно к моей ситуации так не прокатит.


Ну да... в вашей ситуации, когда всё так криво сделано - точно нормальные предложения не катят...
 
Zhunko:
Пора ник менять?

Этому нику лет триста уже... Прирос я к нему.