Закрытая тема
19.10.2013, 18:53
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Ага, работает,
Спасибо.
19.10.2013, 19:51
Аватар для Timjum
Timjum Timjum вне форума Новичок форума
Регистрация: 25.06.2011 / Сообщений: 42
Поблагодарили 4 раз(а) / Репутация: 5
Здравствуйте. Нужно исправить советник. Нужно сделать так, чтобы он открывал только один ордер на сигнале и не открывал других после закрытия ордера, пока не поступит следующий сигнал индикатора. В программировании не шарю, поэтому прошу учесть это )))

Вот код советника:

Скрытый текст

PHP код:
#include <WinUser32.mqh>
#include <stderror.mqh>
#include <stdlib.mqh>

string _scfg="Настройки советника";
extern int magic=1/*magic менять для каждой валютной пары*/
extern int TP=0;/* 0 - неиспользовать*/
extern int SL=0;/* 0 - неиспользовать*/
extern double lot=0.1;/*лот*/
extern bool revers=true;/*закрытие по обратному сигналу*/
extern bool РучноеПодтверждение=false;/*если в настройках включено подтверждение ручное, то включить эту опцию для правильно работы при отмене от открытия позиции*/
extern int cfg_bar=1;
extern bool trailingStop=false;/*включить true; если нужно активировать трейлинг стоп*/
extern int startTrailPoint=20//с +20 пунктов включить трейлинг
extern int TrailStep=5//передвигать при изменении прибыли на 2 и более пунктов

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   
return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   
return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
   
if(IsTradeContextBusy()) return (0); 
      
   static 
int oldsignal=-1;
   
double stop=0,take=0;
   
double zz=0,zz2=0;
   
int signal=__signal(zz,0);
   
int signalClose=__signal(zz2,0);
   
   
int all=__get_count(Symbol(),magic,-1);
   
int d=d(Symbol());
   
int last=__get_last(Symbol(),magic);
   
   if(
trailingStop && all>0){
      
__trail(Symbol(),startTrailPoint,TrailStep,magic,-1);
   }
   
   if((
last!=signal && last!=-&& signal!=-1) && revers==true){
      
         
__close(Symbol(),magic,-1);
         
all=__get_count(Symbol(),magic,-1);
   }
   
   if((
oldsignal!=-&& oldsignal==signal) && РучноеПодтверждение){return (0); }
   
oldsignal=signal;
   
   switch(
signal){
   case 
OP_BUY:
   {
      if(
TP>0take=Ask+TP*d*Point;
      if(
SL>0stop=Ask-SL*d*Point;
      
//lot=__get_lot(Symbol(),1.0,stop,Ask);   
      //Print("zz: ",DoubleToStr(zz,Digits));
      
if(all==&& __is_order_open_by_comment(Symbol(),DoubleToStr(zz,Digits))==false)
      
__open(Symbol(),OP_BUY,lot,Ask,stop,take,magic,DoubleToStr(zz,Digits),Blue);
   }
   break;
   case 
OP_SELL:
   {
      if(
TP>0take=Bid-TP*d*Point;
      if(
SL>0stop=Bid+SL*d*Point;
      
//lot=__get_lot(Symbol(),1.0,stop,Bid);  
      
if(all==&& __is_order_open_by_comment(Symbol(),DoubleToStr(zz,Digits))==false)
      
__open(Symbol(),OP_SELL,lot,Bid,stop,take,magic,DoubleToStr(zz,Digits),Red);
   }
   break;
   }
   
  
  
   
//}
   
//----
   
return(0);
  }
//+------------------------------------------------------------------+
int __signal(double &zz,int pos=1){
  
int signal=-1;  
  
zz=0.0
  
  for(
int i=pos;i<100;i++){
  
HideTestIndicators(TRUE); 
  
double i0=iCustom(Symbol(),0,"Investor2",0,i);    
  
double i1=iCustom(Symbol(),0,"Investor2",1,i);    
  
HideTestIndicators(FALSE); 
   if(
i0!=0.0 && i1==0.0){zz=i0signal=OP_BUY; break; }
   if(
i1!=0.0 && i0==0.0){zz=i1signal=OP_SELL; break;}
  }
   return (
signal);
}

/***
возврат множителя для 5 значного ДЦ
*/
int d(string name=""){

 if(
name==""name=Symbol();
 
int digits=1; if(MarketInfo(name,MODE_DIGITS)==|| MarketInfo(name,MODE_DIGITS)==3digits=10;
 
 return (
digits);
}

void __open(
string name,
int cmd,
double lot,
double open,
double stop,
double take,
int magic,
string comment="",
color cl=CLR_NONE){
   
bool is_open=true;   
   
int j=0;
   
int digit=MarketInfo(name,MODE_DIGITS);
   
   while(
is_open && j<100){
   
j++;
   
   if(
OrderSend(name,cmd,lot,NormalizeDouble(open,digit),0,NormalizeDouble(stop,digit),NormalizeDouble(take,digit),comment,magic,0,cl)==-1){
      
int err=GetLastError();
      
      switch(
err){
         case 
0:
         case 
1
         case 
2: {is_open=false; break;}      
         case 
ERR_REQUOTE: {Print("Реквот"); Sleep(5000);} break;
         case 
ERR_INVALID_STOPS: {Print("Неверный стоп уровень(",name,", ",cmd,", ",lot,", ",open,", ",stop,", ",take,");"); } break;
         case 
ERR_INVALID_TRADE_VOLUME: {Print("Неверный лот(",name,", ",cmd,", ",lot,", ",open,", ",stop,", ",take,");");} break;
         case 
ERR_INVALID_PRICE: {Print("Неверная цена(",name,", ",cmd,", ",lot,", ",open,", ",stop,", ",take,");");} break;
         case 
ERR_TRADE_NOT_ALLOWED: {Print("Торговля не разрешена. Необходимо включить опцию \"Разрешить советнику торговать\" в свойствах эксперта.");} break;
         default: {
is_open=false; Print("Ошибка: ",err," order_open(",name,", ",cmd,", ",lot,", ",open,", ",stop,", ",take,");");} break;
      }
            
      
      if(
cmd==OP_BUY){RefreshRates(); open=MarketInfo(name,MODE_ASK); }
      if(
cmd==OP_SELL){RefreshRates(); open=MarketInfo(name,MODE_BID); }
      
      
   }else{
      
is_open=false;
      break;
      }
      
   }
}

/*подсчет количества ордеров*/
int __get_count(string name,int magic,int type=-1){
 
   
int total=OrdersTotal();
 
   
int ret_count=0;   
   for(
int i=total;i>=0;i--){
   if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(
OrderMagicNumber()==magic && OrderSymbol()==name && (OrderType()==type || type==-1))
            
ret_count++;
         }
   }  
   
   return (
ret_count);
}



int __get_last(string name,int magic){
 
   
int total=OrdersTotal();
 
   for(
int i=total;i>=0;i--){
   if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(
OrderMagicNumber()==magic && OrderSymbol()==name){
               return (
OrderType());         
            }
            
         }
   }  
   
   return (-
1);
}


int __close(string name,int magic,int type){
   
int dDigits=MarketInfo(name,MODE_DIGITS);
   
double dAsk=MarketInfo(name,MODE_ASK);
   
double dBid=MarketInfo(name,MODE_BID);
   
   if(
IsTesting())   dAsk=NormalizeDouble(dAsk,dDigits);
   if(
IsTesting())   dBid=NormalizeDouble(dBid,dDigits);

   
int total=OrdersTotal();
   
int j=0;
   
int err=0;
   for(
int i=total;i>=0;i--){
   if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
      {
         if(
OrderSymbol()==name){ 
         
         if(
OrderType()==OP_BUY && (type==OP_BUY||type==-1)){
         for(
j=0;j<50;j++){
         
RefreshRates();
         if(
OrderClose(OrderTicket(),OrderLots(),dBid,5)==FALSE){
            
err=GetLastError();
            Print(
"Error CloseBUY: ",OrderTicket());
            
Sleep(10000);
            
RefreshRates();
         }else{ break;}
         
         }
         }
         
         if(
OrderType()==OP_SELL  && (type==OP_SELL||type==-1)){
         for(
j=0;j<50;j++){
         
RefreshRates();
         if(
OrderClose(OrderTicket(),OrderLots(),dAsk,5)==FALSE){
            
err=GetLastError();
            Print(
"Error CloseSELL: ",OrderTicket());
            
Sleep(10000);
            
RefreshRates();            
         }else{ break;}
         
         }
         }
         
         if(
OrderType()>=&& (type>=2||type==-1)){
            for(
j=0;j<50;j++){
               if(
OrderDelete(OrderTicket())==FALSESleep(10000); else break;          
            }
         }
      }
      }
   }  

   return (
GetLastError());
}

void __trail(string name,int startTrailPoint,int TrailStep,int magic,int type=-1){
   
int d=1;
   if(
MarketInfo(Symbol(),MODE_DIGITS)==|| MarketInfo(Symbol(),MODE_DIGITS)==3d=10;
   
   
int total=OrdersTotal()-1;
          
   for(
int i=total;i>=0;i--){
   if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(
OrderMagicNumber()==magic && OrderSymbol()==name && (OrderType()==type || type==-1)){
               if(
OrderType()==OP_BUY && Bid-OrderOpenPrice()>startTrailPoint*Point*&& Bid-OrderStopLoss()>TrailStep*Point*&& Ask-startTrailPoint*Point*d>OrderStopLoss()){
                  
OrderModify(OrderTicket(),OrderOpenPrice(),Ask-startTrailPoint*Point*d,OrderTakeProfit(),NULL);
               }
               if(
OrderType()==OP_SELL && OrderOpenPrice()-Ask>startTrailPoint*Point*&& OrderStopLoss()-Ask>TrailStep*Point*&& Bid+startTrailPoint*Point*d<OrderStopLoss()){
                  
OrderModify(OrderTicket(),OrderOpenPrice(),Bid+startTrailPoint*Point*d,OrderTakeProfit(),NULL);
               }

            }
            
         }
   }  
}

bool __is_order_open_by_comment(string name,string text){
   
int total=OrdersTotal();
   for(
int i=total;i>=0;i--){
   if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(
OrderSymbol()==name && StringFind(OrderComment(),text)>=0)  return (true);  
      }
   }  
   
   return (
false);

[свернуть]

Последний раз редактировалось NSerega; 20.10.2013 в 17:32. Причина: Замена CODE на PHP
19.10.2013, 19:53
Аватар для Conn
Conn Conn вне форума Активный участник
Регистрация: 30.09.2013 / Сообщений: 55
Поблагодарили 57 раз(а) / Репутация: 58
Значит пишите
PHP код:
SetIndexStyle(0,DRAW_HISTOGRAM); 
После
PHP код:
int init()

Если что нужно убрать, то после инит есть Сет...
И там где цыфры(может быть 2) удаляете строки.
Есть вот такие строки, последняя строка добалена мною. какие строки мне удалить?

PHP код:
int init()
{
   
IndicatorBuffers(7);
      
SetIndexBuffer(0,hma);
      
SetIndexLabel(0,"Stoch Main");
      
SetIndexBuffer(1,hmada);
      
SetIndexBuffer(2,hmadb);
      
SetIndexBuffer(3,SignalBuffer);
      
SetIndexLabel(3,"Stoch Signal");
      
SetIndexBuffer(4,hma1); 
      
SetIndexBuffer(5,hma2); 
      
SetIndexBuffer(6,trend); 
      
SetIndexStyle(0,DRAW_HISTOGRAM); 

Последний раз редактировалось Conn; 19.10.2013 в 19:58.
kimmar 
19.10.2013, 20:09
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,035 раз(а) / Репутация: 9035
Есть вот такие строки, последняя строка добалена мною. какие строки мне удалить?
PHP код:
SetIndexBuffer(3,SignalBuffer);
SetIndexLabel(3,"Stoch Signal"); 
А ввобще можно было по очереди поудалять и глянуть.
19.10.2013, 20:13
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,035 раз(а) / Репутация: 9035
Здравствуйте. Нужно исправить советник. Нужно сделать так, чтобы он открывал только один ордер на сигнале и не открывал других после закрытия ордера, пока не поступит следующий сигнал индикатора. В программировании не шарю, поэтому прошу учесть это )))
...
if(i0!=0.0 && i1==0.0 && __get_count(Symbol(),magic)==0){zz=i0; signal=OP_BUY; break; }
if(i1!=0.0 && i0==0.0 && __get_count(Symbol(),magic)==0){zz=i1; signal=OP_SELL; break;}

Последний раз редактировалось eevviill; 19.10.2013 в 20:16.
Timjum 
19.10.2013, 20:41
Аватар для sovet
sovet sovet вне форума Активный участник
Регистрация: 19.12.2011 / Сообщений: 129
Поблагодарили 91 раз(а) / Репутация: 92
Здраствуете!можно-ли переделать индикатор vsa который берёт объёмы с ClusterDelta переделать что-бы брал объёмы с терминала тиковые,Зарание спасибо!
19.10.2013, 20:57
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,035 раз(а) / Репутация: 9035
Здраствуете!можно-ли переделать индикатор vsa который берёт объёмы с ClusterDelta переделать что-бы брал объёмы с терминала тиковые,Зарание спасибо!
Поищи AlievFXvolume
19.10.2013, 21:32
Аватар для sovet
sovet sovet вне форума Активный участник
Регистрация: 19.12.2011 / Сообщений: 129
Поблагодарили 91 раз(а) / Репутация: 92
eevviill индикаторы разные по принципу работы с AlievFXvolume,Посмотрите пожалуста можно ли переделать vsa индикатор
19.10.2013, 21:33
Аватар для Timjum
Timjum Timjum вне форума Новичок форума
Регистрация: 25.06.2011 / Сообщений: 42
Поблагодарили 4 раз(а) / Репутация: 5
if(i0!=0.0 && i1==0.0 && __get_count(Symbol(),magic)==0){zz=i0; signal=OP_BUY; break; }
if(i1!=0.0 && i0==0.0 && __get_count(Symbol(),magic)==0){zz=i1; signal=OP_SELL; break;}
Изменил. Все равно открывает лишние ордера. Надо только один ордер на сигнал.
Прикрепляю индикатор и советник, может быть будет легче найти решение.

Последний раз редактировалось Timjum; 19.10.2013 в 22:03.
20.10.2013, 10:54
Аватар для chester2972
chester2972 chester2972 вне форума Интересующийся
Регистрация: 23.04.2011 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Уважаемые форумчане,помогите настроить советник exp_iCustom_v9.ex4 с индикатором,чтобы он покупал при синем цвете индюка а продавал при красном».
20.10.2013, 12:56
Аватар для sega72
sega72 sega72 вне форума Интересующийся
Регистрация: 30.08.2013 / Сообщений: 15
Поблагодарили 3 раз(а) / Репутация: 4
Уважаемые программисты, по советнику в посте 6672 можно что то сделать ,или дело безнадежно?
20.10.2013, 16:51
Аватар для Conn
Conn Conn вне форума Активный участник
Регистрация: 30.09.2013 / Сообщений: 55
Поблагодарили 57 раз(а) / Репутация: 58
Уважаемые программисты, попробовал сделать индикатор вверху в виде гистограммы (см.рис.1). получилось так, что гистограмма на sell отображается иначе чем гистограмма на buy. Скажите пожалуйста в чем проблема и как ее исправить?

Последний раз редактировалось Conn; 20.10.2013 в 16:55.
atisz , dadik , Suorun 
20.10.2013, 17:27
Аватар для chester2972
chester2972 chester2972 вне форума Интересующийся
Регистрация: 23.04.2011 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Уважаемые программисты,в советнике значение переменной Buy Stop Price вводиться в ручную,исправте пожайлуста,чтобы переменная задавалась автоматически на 10 пунктов выше/ниже от рыночной цены
20.10.2013, 20:03
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,035 раз(а) / Репутация: 9035
Уважаемые программисты,в советнике значение переменной Buy Stop Price вводиться в ручную,исправте пожайлуста,чтобы переменная задавалась автоматически на 10 пунктов выше/ниже от рыночной цены
if (fOrderSetBuyStop(Ask+BuyStopPrice*Point, "=1=") > 0)
20.10.2013, 21:28
Аватар для chester2972
chester2972 chester2972 вне форума Интересующийся
Регистрация: 23.04.2011 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
eevviill Не получилось,в mql программировании я мало понимаю.Исправь пожайлуста

Скрытый текст

extern double BuyStopPrice = 0.0;
extern int Level = 25;
extern int OrdersCount = 10;
extern int Magic_N = 555;
extern double Lots_01 = 0.01;
extern double Lots_02 = 0.02;
extern double Lots_03 = 0.04;
extern double Lots_04 = 0.08;
extern double Lots_05 = 0.16;
extern double Lots_06 = 0.32;
extern double Lots_07 = 0.64;
extern double Lots_08 = 1.28;
extern double Lots_09 = 2.56;
extern double Lots_10 = 5.12;
extern bool InfoOn = TRUE;
extern color InfoColor = Yellow;
extern bool Show_Alerts = TRUE;
extern bool Send_Email = FALSE;
int gia_192[] = {3017758, 11111, 11111111, 1111111};
string gs_196 = "2030.02.27";
int gi_204 = 16748574;
double gda_208[10];
int gi_212;
int gi_216;
double gd_220;
int g_count_228 = 0;
int gi_232 = -1;
int gi_236 = -1;
int gi_240 = -1;
int gi_244 = -1;
double g_ord_stoploss_248;
double g_ord_stoploss_256;
double g_ord_takeprofit_264;
double g_ord_takeprofit_272;
int g_ticket_280;
int g_ticket_284;
string gs_288 = "AccInfSymbInf_Lbl_";
string gs_296;
int g_datetime_304 = 0;
int g_datetime_308 = 0;
int g_datetime_312 = 0;
int g_datetime_316 = 0;
int g_datetime_320 = 0;
int g_datetime_324 = 0;
int g_datetime_328 = 0;
int g_datetime_332 = 0;
int g_datetime_336 = 0;
int g_datetime_340 = 0;
int g_datetime_344 = 0;
int g_datetime_348 = 0;
int g_datetime_352 = 0;
bool gi_356;
int gia_360[];
string gsa_364[];
int gia_368[];
int gia_372[];
double gda_376[];
double gda_380[];
double gda_384[];
double gda_388[];
int gia_392[];
int gia_396[];

int init() {
gi_212 = Level;
OrdersCount = MathMin(OrdersCount, 10);
gi_216 = Level;
gda_208[0] = Lots_01;
gda_208[1] = Lots_02;
gda_208[2] = Lots_03;
gda_208[3] = Lots_04;
gda_208[4] = Lots_05;
gda_208[5] = Lots_06;
gda_208[6] = Lots_07;
gda_208[7] = Lots_08;
gda_208[8] = Lots_09;
gda_208[9] = Lots_10;
gs_296 = WindowExpertName() + "_" + Symbol() + "_" + Magic_N + "_";
if (IsTesting()) gs_296 = gs_296 + "t_";
if (IsDemo()) gs_296 = gs_296 + "d_";
if (IsTesting()) {
for (int li_0 = GlobalVariablesTotal() - 1; li_0 >= 0; li_0--)
if (StringFind(GlobalVariableName(li_0), gs_296, 0) == 0) GlobalVariableDel(GlobalVariableName(li_0));
}
return (0);
}

int deinit() {
fObjDeleteByPrefix(gs_288);
fObjDeleteByPrefix(WindowExpertName());
Comment("");
if (IsTesting()) {
for (int li_0 = GlobalVariablesTotal() - 1; li_0 >= 0; li_0--)
if (StringFind(GlobalVariableName(li_0), gs_296, 0) == 0) GlobalVariableDel(GlobalVariableName(li_0));
}
return (0);
}

int start() {
bool li_0;
if (!IsTesting() && !IsDemo()) {
li_0 = FALSE;
for (int l_index_4 = 0; l_index_4 < ArraySize(gia_192); l_index_4++) {
if (gia_192[l_index_4] == AccountNumber()) {
li_0 = TRUE;
break;
}
}
if (!li_0) {
Alert("INFO-Signals - неверный номер счета!");
return (0);
}
}
if (TimeCurrent() > StrToTime(gs_196)) {
Alert("INFO-Signals - срок работы закончился!");
return (0);
}
fObjLabel(WindowExpertName(), 4, 1, "", 2, gi_204, 8, 0, "Arial", FALSE);
if (InfoOn) AccountAndSymbolLbls();
fOrderEvents(Symbol(), Magic_N, WindowExpertName(), Show_Alerts, 0, Send_Email, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1);
if (!fCount()) return (0);
string ls_8 = "";
if (g_count_228 == 0) {
if (BuyStopPrice == 0.0) {
GlobalVariableDel(gs_296 + "BLOCK");
ls_8 = "Система готова к вводу BuyStopPrice";
} else
if (GlobalVariableCheck(gs_296 + "BLOCK")) ls_8 = "Система заблокирована. Обнулите BuyStopPrice";
}
Comment(ls_8);
if (BuyStopPrice != 0.0) {
if (!GlobalVariableCheck(gs_296 + "BLOCK")) {
if (g_count_228 == 0) {
gd_220 = gda_208[0];
if (fOrderSetBuyStop(BuyStopPrice, "=1=") > 0)
if (!fCount()) return (0);
}
}
}
if (gi_240 == 1) {
if (gi_244 == -1 && gi_236 == -1) {
gd_220 = gda_208[0];
if (fOrderSetSellStop(g_ord_stoploss_248, "=1=") > 0) GlobalVariableSet(gs_296 + "BLOCK", 1);
else return (0);
}
}
if (gi_232 != -1) {
if (gi_232 == 1) {
if (gi_244 == 1)
if (fDeletePendig(g_ticket_284) != 0) return (0);
}
if (gi_244 != gi_232 + 1) {
if (gi_232 < OrdersCount) {
gd_220 = gda_208[gi_232];
if (gi_232 % 2 == 1) fOrderSetBuyLimit(g_ord_stoploss_248 + (Ask - Bid), "=" + ((gi_232 + 1)) + "=");
else fOrderSetSellStop(g_ord_stoploss_248, "=" + ((gi_232 + 1)) + "=");
}
return (0);
}
}
if (gi_236 != -1) {
if (gi_236 == 1) {
if (gi_240 == 1)
if (fDeletePendig(g_ticket_280) != 0) return (0);
}
if (gi_240 != gi_236 + 1) {
if (gi_236 < OrdersCount) {
gd_220 = gda_208[gi_236];
if (gi_236 % 2 == 1) fOrderSetSellLimit(g_ord_stoploss_256 - (Ask - Bid), "=" + ((gi_236 + 1)) + "=");
else fOrderSetBuyStop(g_ord_stoploss_256, "=" + ((gi_236 + 1)) + "=");
}
return (0);
}
}
if (!fCount()) return (0);
if (g_count_228 == 1) {
if (gi_240 != -1) fDeletePendig(g_ticket_280);
if (gi_244 != -1) fDeletePendig(g_ticket_284);
}
return (0);
}

int fDeletePendig(int a_ticket_0) {
if (!IsTradeContextBusy()) {
if (!OrderDelete(a_ticket_0)) {
Print("Error del pending " + a_ticket_0 + ". " + fMyErDesc(GetLastError()));
return (-1);
}
} else {
if (TimeCurrent() > g_datetime_304 + 20) {
g_datetime_304 = TimeCurrent();
Print("Need del pending " + a_ticket_0 + ". Trade Context Busy");
}
return (-2);
}
return (0);
}

double ND(double ad_0) {
return (NormalizeDouble(ad_0, Digits));
}

bool fCount() {
g_count_228 = 0;
gi_232 = -1;
gi_236 = -1;
gi_240 = -1;
gi_244 = -1;
for (int l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) {
if (OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol()) {
if (OrderMagicNumber() == Magic_N) {
switch (OrderType()) {
case OP_BUY:
g_count_228++;
fOrderSelectedCommentGetIndex_1("=", gi_232);
g_ord_stoploss_248 = OrderStopLoss();
break;
case OP_SELL:
g_count_228++;
fOrderSelectedCommentGetIndex_1("=", gi_236);
g_ord_stoploss_256 = OrderStopLoss();
break;
case OP_BUYSTOP:
case OP_SELLLIMIT:
g_count_228++;
fOrderSelectedCommentGetIndex_1("=", gi_240);
g_ord_stoploss_248 = OrderStopLoss();
g_ticket_280 = OrderTicket();
g_ord_takeprofit_264 = OrderTakeProfit();
break;
case OP_SELLSTOP:
case OP_BUYLIMIT:
g_count_228++;
fOrderSelectedCommentGetIndex_1("=", gi_244);
g_ord_stoploss_256 = OrderStopLoss();
g_ord_takeprofit_272 = OrderTakeProfit();
g_ticket_284 = OrderTicket();
}
}
}
} else return (FALSE);
}
return (TRUE);
}

int fOrderSelectedCommentGetIndex_1(string as_0, int &ai_8) {
int li_16;
int li_12 = StringFind(OrderComment(), as_0, 0);
if (li_12 == 0) {
li_16 = StringFind(OrderComment(), as_0, 1);
if (li_16 > 0) {
ai_8 = StrToInteger(StringSubstr(OrderComment(), 1, li_16 - li_12 - 1));
if (ai_8 == 0) ai_8 = OrderTicket();
return (1);
}
}
return (0);
}

int fOrderSetBuyStop(double ad_0, string a_comment_8, int a_datetime_16 = 0) {
double l_lots_36;
double l_price_44;
double l_price_52;
int l_ticket_60;
RefreshRates();
double l_price_20 = ND(ad_0);
double ld_28 = ND(Ask + Point * MarketInfo(Symbol(), MODE_STOPLEVEL));
if (l_price_20 >= ld_28) {
l_lots_36 = fGetLotsSimple(OP_BUY);
if (l_lots_36 > 0.0) {
if (!IsTradeContextBusy()) {
l_price_44 = ND(l_price_20 - Point * gi_216);
if (gi_216 == 0) l_price_44 = 0;
l_price_52 = ND(l_price_20 + Point * gi_212);
if (gi_212 == 0) l_price_52 = 0;
l_ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, l_lots_36, l_price_20, 0, l_price_44, l_price_52, a_comment_8, Magic_N, a_datetime_16, CLR_NONE);
if (l_ticket_60 > 0) return (l_ticket_60);
Print("Error set BUYSTOP. " + fMyErDesc(GetLastError()));
return (-1);
}
if (TimeCurrent() > g_datetime_308 + 20) {
g_datetime_308 = TimeCurrent();
Print("Need set BUYSTOP. Trade Context Busy");
}
return (-2);
}
if (TimeCurrent() > g_datetime_312 + 20) {
g_datetime_312 = TimeCurrent();
if (l_lots_36 == -1.0) Print("Need set BUYSTOP. No money");
if (l_lots_36 == -2.0) Print("Need set BUYSTOP. Wrong lots size");
}
return (-3);
}
if (TimeCurrent() > g_datetime_316 + 20) {
g_datetime_316 = TimeCurrent();
Print("Need set BUYSTOP. Wrong price level ", ld_28, " ", Ask);
}
return (-4);
}

int fOrderSetSellStop(double ad_0, string a_comment_8, int a_datetime_16 = 0) {
double l_lots_36;
double l_price_44;
double l_price_52;
int l_ticket_60;
RefreshRates();
double l_price_20 = ND(ad_0);
double ld_28 = ND(Bid - Point * MarketInfo(Symbol(), MODE_STOPLEVEL));
if (l_price_20 <= ld_28) {
l_lots_36 = fGetLotsSimple(OP_SELL);
if (l_lots_36 > 0.0) {
if (!IsTradeContextBusy()) {
l_price_44 = ND(l_price_20 + Point * gi_216);
if (gi_216 == 0) l_price_44 = 0;
l_price_52 = ND(l_price_20 - Point * gi_212);
if (gi_212 == 0) l_price_52 = 0;
l_ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, l_lots_36, l_price_20, 0, l_price_44, l_price_52, a_comment_8, Magic_N, a_datetime_16, CLR_NONE);
if (l_ticket_60 > 0) return (l_ticket_60);
Print("Error set SELLSTOP. " + fMyErDesc(GetLastError()));
return (-1);
}
if (TimeCurrent() > g_datetime_320 + 20) {
g_datetime_320 = TimeCurrent();
Print("Need set SELLSTOP. Trade Context Busy");
}
return (-2);
}
if (TimeCurrent() > g_datetime_324 + 20) {
g_datetime_324 = TimeCurrent();
if (l_lots_36 == -1.0) Print("Need set SELLSTOP. No money");
if (l_lots_36 == -2.0) Print("Need set SELLSTOP. Wrong lots size");
}
return (-3);
}
if (TimeCurrent() > g_datetime_328 + 20) {
g_datetime_328 = TimeCurrent();
Print("Need set SELLSTOP. Wrong price level");
}
return (-4);
}

double fGetLotsSimple(int a_cmd_0) {
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, gd_220) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (gd_220);
}

int fOrderSetBuyLimit(double ad_0, string a_comment_8, int a_datetime_16 = 0) {
double l_lots_36;
double l_price_44;
double l_price_52;
int l_ticket_60;
RefreshRates();
double l_price_20 = ND(ad_0);
double ld_28 = ND(Ask - Point * MarketInfo(Symbol(), MODE_STOPLEVEL));
if (l_price_20 <= ld_28) {
l_lots_36 = fGetLotsSimple(OP_BUY);
if (l_lots_36 > 0.0) {
if (!IsTradeContextBusy()) {
l_price_44 = ND(l_price_20 - Point * gi_216);
if (gi_216 == 0) l_price_44 = 0;
l_price_52 = ND(l_price_20 + Point * gi_212);
if (gi_212 == 0) l_price_52 = 0;
l_ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, l_lots_36, l_price_20, 0, l_price_44, l_price_52, a_comment_8, Magic_N, a_datetime_16, CLR_NONE);
if (l_ticket_60 > 0) return (l_ticket_60);
Print("Error set BUYLIMIT. " + fMyErDesc(GetLastError()));
return (-1);
}
if (TimeCurrent() > g_datetime_332 + 20) {
g_datetime_332 = TimeCurrent();
Print("Need set BUYLIMIT. Trade Context Busy");
}
return (-2);
}
if (TimeCurrent() > g_datetime_336 + 20) {
g_datetime_336 = TimeCurrent();
if (l_lots_36 == -1.0) Print("Need set BUYLIMIT. No money");
if (l_lots_36 == -2.0) Print("Need set BUYLIMIT. Wrong lots size");
}
return (-3);
}
if (TimeCurrent() > g_datetime_340 + 20) {
g_datetime_340 = TimeCurrent();
Print("Need set BUYLIMIT. Wrong price level");
}
return (-4);
}

int fOrderSetSellLimit(double ad_0, string a_comment_8, int a_datetime_16 = 0) {
double l_lots_36;
double l_price_44;
double l_price_52;
int l_ticket_60;
RefreshRates();
double l_price_20 = ND(ad_0);
double ld_28 = ND(Bid + Point * MarketInfo(Symbol(), MODE_STOPLEVEL));
if (l_price_20 >= ld_28) {
l_lots_36 = fGetLotsSimple(OP_SELL);
if (l_lots_36 > 0.0) {
if (!IsTradeContextBusy()) {
l_price_44 = ND(l_price_20 + Point * gi_216);
if (gi_216 == 0) l_price_44 = 0;
l_price_52 = ND(l_price_20 - Point * gi_212);
if (gi_212 == 0) l_price_52 = 0;
l_ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, l_lots_36, l_price_20, 0, l_price_44, l_price_52, a_comment_8, Magic_N, a_datetime_16, CLR_NONE);
if (l_ticket_60 > 0) return (l_ticket_60);
Print("Error set SELLLIMIT. " + fMyErDesc(GetLastError()));
return (-1);
}
if (TimeCurrent() > g_datetime_344 + 20) {
g_datetime_344 = TimeCurrent();
Print("Need set SELLLIMIT. Trade Context Busy");
}
return (-2);
}
if (TimeCurrent() > g_datetime_348 + 20) {
g_datetime_348 = TimeCurrent();
if (l_lots_36 == -1.0) Print("Need set SELLLIMIT. No money");
if (l_lots_36 == -2.0) Print("Need set SELLLIMIT. Wrong lots size");
}
return (-3);
}
if (TimeCurrent() > g_datetime_352 + 20) {
g_datetime_352 = TimeCurrent();
Print("Need set SELLIMIT. Wrong price level");
}
return (-4);
}
[свернуть]

Последний раз редактировалось NSerega; 21.10.2013 в 00:51.
20.10.2013, 21:36
Аватар для VAK
VAK VAK вне форума Почётный гражданин
Регистрация: 05.08.2008 / Сообщений: 378
Поблагодарили 79 раз(а) / Репутация: 91
Уважаемые программисты,в советнике значение переменной Buy Stop Price вводиться в ручную,исправте пожайлуста,чтобы переменная задавалась автоматически на 10 пунктов выше/ниже от рыночной цены
Откуда этот навороченный советник? Он не будет компилироваться, тк ломаный....
20.10.2013, 22:01
Аватар для sergey122
sergey122 sergey122 вне форума Местный знаток
Регистрация: 10.01.2012 / Сообщений: 823
Поблагодарили 773 раз(а) / Репутация: 774
Господа программисты,нужна ваша помощь! Прошу сделать небольшую доработку, бо сам не умею.
Необходимо добавить в трал функцию удаления отложенных ордеров, чтобы при закрытии всей серии активных ордеров , удалялись все несработавшие отложенные ордера.
Кому не трудно - помогите плиз!
20.10.2013, 22:35
Аватар для Timjum
Timjum Timjum вне форума Новичок форума
Регистрация: 25.06.2011 / Сообщений: 42
Поблагодарили 4 раз(а) / Репутация: 5
Уважаемые форумчане,помогите настроить советник exp_iCustom_v9.ex4 с индикатором,чтобы он покупал при синем цвете индюка а продавал при красном».
Сам не программист и свой индикатор сам тестил этим советником, только версией 4.

Спасибо eevviillу за его высказывание:

"Откажитесь от намерения получить, замените его намерением дать, и вы получите то, от чего отказались".

Сделал сет как вы просили.

P.S. К сету еще добавил трайлинг стоп для интереса.
20.10.2013, 23:14
Аватар для chester2972
chester2972 chester2972 вне форума Интересующийся
Регистрация: 23.04.2011 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Timjum,спасибо, всё работает
21.10.2013, 04:07
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336

По умолчанию Закрытие в пятницу

День добрый.

Подскажите, пожалуйста, как добавить:

- в пятницу с хх часов хх мин новые сделки не открываются ( но с понедельника в обычном режиме);

- в пятницу в хх часов хх мин все открытые сделки закрыть.

Последний раз редактировалось Sergey55555555; 10.01.2014 в 13:09.
Закрытая тема

Метки
mql программирование, дописать индикатор, дописать эксперт, доработать советник, форекс программирование


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь профессионального программиста в написании МТС индикаторов советников. cmillion Поиск программиста, поиск заказов 96 05.09.2017 08:20
Написание экспертов, индикаторов. Улсуги VPS для ваших советников. RL.Maxim Temp, корзина, реклама 5 31.10.2009 21:55
Написание советников, индикаторов, скриптов для MT4 по Вашему ТЗ Impish Поиск программиста, поиск заказов 0 04.04.2009 21:30


Текущее время: 02:05. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO