[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 548

 
harvest:
Господа кто нить может привести пример функции переводящая в безубыток открытую позицию (работа по тику), в советнике имеется трал, старт этого трала только после выполнения функции переноса в б\у. Заранее спасибо.


См. в прицепе - библиотеку тралов от Ю.Дзюбана, в частности, как он решает вопрос при условии, что тралить только с профита, т.е. при значении переменной trlinloss = false тралить ли в зоне убытков. Правьте свою функцию трала по данному примеру и все.

Файлы:
 

Друзья,скажите, почему не работает классический Мартин? Открывает сделки только на покупки!!! Уже месяц с ним долблюсь - ноль эмоций! При чем на тестере нормально работает, а на демо нет. Еще интересная штука - ставлю T/S и T/P 1000 - открывает только на покупку, а ставлю 200 - на покупку и продажу... блин, в чем разница-то?!

вот код: помогите плз

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


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

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

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



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

Тогда становиться еще более не понятно. Допустим я покупаю евро на 1 000 000 (1кк) долларов (брокер это умножает на 100 в итоге сделка идет на 100кк) график прыгает на 100 пунктов в верх тут же их продаю и я в плюсе на 10 000 долларов ну там комиссия брокера и спред в итоге 6000$ чистыми у меня в кармане. (Ну понятно что после продажи он снова упадет на 100 пунктов.) Это бред!!!! Может он все-таки в низ упадет? А иначе очень крупные игроки так бы зарабатывали миллиарды, ничего по сути не делая.


Тогда не знаю..

Вообще дело наверно в том, что для заметного движения цені нужно очень на большую сумму купить или продать, НУ ОООЧЕНЬ на большую. При таких суммах кридитное плече не 1/200, как у миня, а 1/2 ну я образно. комиссия брокера и спред тут очень существенні. Ну єто мое чисто личное. Я магу бред ТАКООООЙ написать...

 
Меня удивляет один момент. Я тут ранее выкладывал код, там была ошибка, ее помогли мне исправить, помогла Sepulca, спасибо ей, типерь код весь работает.. Но я все же нипонял загадку- в первом цикле фор ордер ордерселектом отбирался, ошибка ноль, а далее, выбирая в другой строке, ниже, ордерселектом тот же самый ордер, была ошибка? Если можно, посмотрите, просто мне интересно.
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

Што вы! Почему же нет? Открытых ордеров на момент перебора не было! Может я не понял?

И цикл перебора ведь тоже на истории! Там где я в нем переменной int ticket присваиваю

А ругается, извините, так 2012.02.04 11:28:47 2011.12.06 16:35 антиб EURUSD,M30: Alert: SELL Select error HISTORYticket 4105

Когда же попадает он из MODE_HISTORY, в MODE_TRADES ??

А главное, я же ведь его же, этот же ордер, так же на истории отбираю с помощью ордердер селект, и по-первах он же отбирается, иначе б я с ним и работать не смог!! Логики нету!!!!!!Яв шоке..


 
Не подскажете, где можно поискать такой советник или скрипт... По обе стороны от цены выставлена группа ордеров (по 9-11 штук) на расстоянии 5-7п от цены. время на их срабатывание жестко ограниченно. в связи с этим, очень часто ордера не зацепляет и они удаляются. время выставления ордеров раннее утро, как правило, рынок жестко флетится. хотелось бы, чтобы по мере приближения цены к одной из групп ордеров вторая группа ордеров двигалась бы за ценой. проще говоря нужен трал отложенных ордеров с тп и сл. такое возможно?? заранее большое спасибо.
 

Нужна помощь!

В советнике имею следующий блок (Счетчик событий):

if (isCloseLastPosByStop()==True) //Если последний ордер закрылся Стопом

{
N=N+1;
Alert(N, " лось");
} else N=0;

ВОПРОС: как вместо вывода информации на экран записать данные в файл (эксель)?

 

День добрый

подскажите почему стрелочки не рисуются, код:

ObjectCreate("miniDown", OBJ_ARROW, 0, Time[1], Open[1]);
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241);
ObjectSet("miniDown", OBJPROP_COLOR, Yellow);

 

допустим курс EURUSD =1.44757, курс GBPUSD=1.63366, нужно сделать так, чтобы они находились близко друг к другу.

Поясню:

a=GBPUSD/EURUSD=1.12855336874901 примерно 1.12855,

т.е. если я хочу купить/продать валюту, чтобы сделка примерно равнялась по стоимости, то

надо купить/продать EURUSD*a, но такого же лота нет, поэтому вопрос мой заключается, как это реализовать, расчет лота?

кто понял суть проблемы помогите.

 
T-G:
поделитесь пожалуйста функция расчета максимально допустимого лота, с учетом открытых позиций то есть по эквити. а то стандартная считает риск но если есть сделки денег не хватает на открытие

Писал когда-то для заказного советника:

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

Чтобы скорректировать лот, нужно вызвать функцию, вставив в качестве параметра lt лот, котоым хотите открыть позицию, а вместо параметра Part - число, на которое будут разделены свободные средства, используемые в торговле. Т.е. чтобы торговать только половиной свободных средств, Part должна иметь значение 2, если треть, то 3, четверть - 4 и т.д.

double Lot=CorrectLots(0.1, 2);

После вызова функции, вставляйте Lot в качестве параметра ф-ции OrderSend();

Функция прекрасно ограничивала лоты в советнике с жестким мартином и не давала сливать. Правда и прибыльность понижалась...

 
отыветьте на мое предыдщее плз, не пойму, в чем там ошибка =(