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

 

Здравствуйте, господа программеры.

Лень лезть в учебник. Может кто знает что надо изменить в советнике, чтобы он мани-менеджмент применял с шагом не в 0.1, а в 0.01

Файлы:
 
SteelKnight84:

Здравствуйте, господа программеры.

Лень лезть в учебник. Может кто знает что надо изменить в советнике, чтобы он мани-менеджмент применял с шагом не в 0.1, а в 0.01


Всем лень
 
Vinin:

Всем лень

Одно дело когда программисту, знающему язык, лень открыть прогу. Другое дело, когда человеку, не знающему язык лень учить язык, чтобы ответить на по сути простой вопрос. Если для программиста знание языка необходимость, то для меня погружаться в него нет смысла :) Вот и все. Но естественно, если никто не ответит, придется. Но в чем смысл форума тогда, если тут общаются только программисты?
 
SteelKnight84:

Одно дело когда программисту, знающему язык, лень открыть прогу. Другое дело, когда человеку, не знающему язык лень учить язык, чтобы ответить на по сути простой вопрос. Если для программиста знание языка необходимость, то для меня погружаться в него нет смысла :) Вот и все. Но естественно, если никто не ответит, придется. Но в чем смысл форума тогда, если тут общаются только программисты?

Если нет смысла - не задавайте вопросы а сразу же сюда
 
Vinin:

Если нет смысла - не задавайте вопросы а сразу же сюда

и на том спасибо
 
SteelKnight84:

Здравствуйте, господа программеры.

Лень лезть в учебник. Может кто знает что надо изменить в советнике, чтобы он мани-менеджмент применял с шагом не в 0.1, а в 0.01


поменял 2 цифры, посмотрите или так как надо работает.

Файлы:
 

Есть ли возможность отметить весь форум прочтенным?

А так же MQL5-ый форум...

Спасибо

 
ALXIMIKS:


поменял 2 цифры, посмотрите или так как надо работает.


Оказывается кому-то не лень. Я ошибся
 

Всем привет!!! Всем спасибо за дельные советы. Но я так и не смог продвинуться в начатом)) У меня советник открывает два одинаковых ордера и остальные против движения, хочу поменять чтобы открывал по движению!!! Перепробывал все варианты.

ПОДСКАЖИТЕ КТО МОЖЕТ

string GLOB_START;

int init()
{
GLOB_START = "@" + DoubleToStr(ID,0) + "@" +"_start";
if ( !GlobalVariableCheck( GLOB_START ) )GlobalVariableSet(GLOB_START,TimeCurrent());
return(0);
}

int deinit()
{
switch( UninitializeReason() )
{
case REASON_REMOVE: delete_glob ( "@" + DoubleToStr(ID,0) + "@" );
}
if ( IsTesting() )delete_glob ( "@" + DoubleToStr(ID,0) + "@" );
return(0);
}

void delete_glob ( string c )
{
int i;
for ( i = GlobalVariablesTotal()-1; i>= 0 ; i-- )if ( StringFind(GlobalVariableName(i),c) >= 0 )GlobalVariableDel(GlobalVariableName(i));
}

int start()
{
Comment(Info());
int KOL_BUY = order_total(0);
int KOL_SELL = order_total(1);
double l;

if ( order_total() == 0 )
{
open(0,Lot,0,TP);
open(1,Lot,0,TP);
}

if ( KOL_BUY == 0 && KOL_SELL != 0 )
{
open(0,Lot,0,TP);
l = last_trade(1);
open(1,l,0,0);
modify_orders(1);
}

if ( KOL_BUY != 0 && KOL_SELL == 0 )
{
open(1,Lot,0,TP);
l = last_trade(0);
open(0,l,0,0);
modify_orders(0);
}

return(0);
}

string Info()
{
int i;
double buff_1 = 0, buff_2 = 0, buff_3 = 0;
string res = "\n";

for( i = OrdersHistoryTotal() - 1; i >= 0; i-- )
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if( OrderMagicNumber() == ID )
{
if ( OrderOpenTime() >= iTime(NULL,PERIOD_D1,0) )buff_1 += OrderProfit();
if ( OrderOpenTime() >= iTime(NULL,PERIOD_D1,1) && OrderOpenTime() < iTime(NULL,PERIOD_D1,0) )buff_2 += OrderProfit();
if ( OrderOpenTime() >= GlobalVariableGet(GLOB_START) )buff_3 += OrderProfit();
}
}

res = res + "Прибыль в валюте депозита за " + TimeToStr(iTime(NULL,PERIOD_D1,0)) + ": " + DoubleToStr(buff_1,0) + "\n" + "\n";
res = res + "Прибыль в валюте депозита за " + TimeToStr(iTime(NULL,PERIOD_D1,1)) + ": " + DoubleToStr(buff_2,0) + "\n" + "\n";
res = res + "Прибыль в валюте депозита общая: "+ DoubleToStr(buff_3,0) + "\n";
return(res);
}

void modify_orders( int type )
{
int i;
datetime time_last = 0, time_first = TimeCurrent();
double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT), op_pr_last, op_pr_first, level;

for( i = OrdersTotal() - 1; i >= 0; i-- )
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( OrderMagicNumber() == ID && OrderType() == type )
{
if ( OrderOpenTime() > time_last )
{
op_pr_last = OrderOpenPrice();
time_last = OrderOpenTime();
}
if ( OrderOpenTime() < time_first )
{
op_pr_first = OrderOpenPrice();
time_first = OrderOpenTime();
}
}
}


if ( type == 0 )level = op_pr_last + MathAbs(op_pr_last-op_pr_first) * (SL/100);
if ( type == 1 )level = op_pr_last - MathAbs(op_pr_last-op_pr_first) * (SL/100);

for( i = OrdersTotal() - 1; i >= 0; i -- )
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( OrderMagicNumber() == ID && OrderType() == type && NormalizeDouble(OrderTakeProfit(),Digits) != NormalizeDouble(level,Digits) )OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),level,0);
}
}

double last_trade( int t )
{
int i;
double res = -1;
datetime time=0;

for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderOpenTime()>time && OrderMagicNumber()==ID && OrderType() == t)
{
res = OrderLots();
time = OrderOpenTime();
}
}
if ( multiplier )return(res * Lot_koeff);
if ( !multiplier )return(res + Lot_koeff);
}
int open(int type, double l, double sl=0, double tp=0, string comm = "")
{
int isOpened = 0, try = 0;
double s,t;
while ( IsTradeContextBusy() ){Sleep(500);}
RefreshRates();
if ( sl != 0 && sl < MarketInfo(Symbol(),MODE_STOPLEVEL) )sl = MarketInfo(Symbol(),MODE_STOPLEVEL);
if ( tp != 0 && tp < MarketInfo(Symbol(),MODE_STOPLEVEL) )tp = MarketInfo(Symbol(),MODE_STOPLEVEL);
if ( type == 0 )
{
if ( tp == 0 )t = 0;
if ( tp != 0 )t = Ask + tp * Point;
if ( sl == 0 )s = 0;
if ( sl != 0 )s = Bid - sl * Point;
}
if ( type == 1 )
{
if ( tp == 0 )t = 0;
if ( tp != 0 )t = Bid - tp * Point;
if ( sl == 0 )s = 0;
if ( sl != 0 )s = Ask + sl * Point;
}
s = NormalizeDouble(s,Digits);
t = NormalizeDouble(t,Digits);
if(type==0)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Ask,Digits),10,s,t,comm,ID);
if(type==1)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Bid,Digits),10,s,t,comm,ID);
Sleep(500);
while(isOpened<0)
{
while ( IsTradeContextBusy() ){Sleep(500);}
RefreshRates();
if ( type == 0 )
{
if ( tp == 0 )t = 0;
if ( tp != 0 )t = Bid + tp * Point;
if ( sl == 0 )s = 0;
if ( sl != 0 )s = Bid - sl * Point;
}
if ( type == 1 )
{
if ( tp == 0 )t = 0;
if ( tp != 0 )t = Ask - tp * Point;
if ( sl == 0 )s = 0;
if ( sl != 0 )s = Ask + sl * Point;
}
s = NormalizeDouble(s,Digits);
t = NormalizeDouble(t,Digits);
try++;
if(type==0)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Ask,Digits),10,s,t,comm,ID);
if(type==1)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Bid,Digits),10,s,t,comm,ID);
if(try > 5) break;
if(isOpened>=0)break;
Sleep(500);
}
if(isOpened<0) Alert("Ордер не открыт, ошибка :", GetLastError());
return (isOpened);
}

int order_total( int type_1 = -1, int type_2 = -1 )
{
int i;
int kol=0;
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==ID && (OrderType() == type_1 || OrderType() == type_2) )kol++;
if(OrderMagicNumber()==ID && type_1 == -1 && type_2 == -1 )kol++;
}
return(kol);
}

double check_lot(double &lo)
{
double l = MarketInfo(Symbol(),MODE_LOTSTEP);
int ok = 0;
while ( l < 1 ){l*=10;ok++;}
if( lo < MarketInfo(Symbol(),MODE_MINLOT) )lo = MarketInfo(Symbol(),MODE_MINLOT);
if( lo > MarketInfo(Symbol(),MODE_MAXLOT) )lo = MarketInfo(Symbol(),MODE_MAXLOT);
return(NormalizeDouble(lo,ok));

 

Подскажите такую вещь, есть на счете N советников которые при определенных условиях могут все сразу в одно время открыть ордер, стоит в каждом проверка не большего 1 ордера на счете, но в итоге иногда получаю N ордеров, что можно сделать?

Причина обращения: