//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ voidOnTick () { { if ( Bars < 801 || ( IsTradeAllowed ()== false )) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли return ; } //+----------------------------------------------------------------
} //+------------------------------------------------------------------+ bool myOrdersTotal() //если ордера есть { for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров { if ((( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))== true ) && OrderSymbol ()== Symbol () && ( OrderType ()< 2 )) { returntrue ; } } returnfalse ; } //------------------------------------------------------------------- double FindLastOrderOpenPrice() { double oldorderopenprice= 0 ; int oldticket= 0 ; ticket= 0 ; for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров { if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic) && ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )) { oldticket= OrderTicket (); if (oldticket>=ticket) { ticket=oldticket; oldorderopenprice= OrderOpenPrice (); } } } return (oldorderopenprice); } //-------------------------------------------------------------------
//+------------------------------------------------------------------+ //| Создает горизонтальную линию | //+------------------------------------------------------------------+ bool HLineCreate( constlong chart_ID= 0 , // ID графика conststring name= "HLine" , // имя линии constint sub_window= 0 , // номер подокна double price= 0 , // цена линии constcolor clr= clrRed , // цвет линии constENUM_LINE_STYLE style= STYLE_SOLID , // стиль линии constint width= 1 , // толщина линии constbool back= false , // на заднем плане constbool selection= true , // выделить для перемещений constbool hidden= true , // скрыт в списке объектов constlong z_order= 0 ) // приоритет на нажатие мышью { //--- если цена не задана, то установим ее на уровне текущей цены Bid if (!price) price= SymbolInfoDouble ( Symbol (), SYMBOL_BID ); //--- сбросим значение ошибки ResetLastError (); //--- создадим горизонтальную линию if ( ObjectFind (chart_ID,name)!=sub_window) { if (! ObjectCreate (chart_ID,name, OBJ_HLINE ,sub_window, 0 ,price)) { Print ( __FUNCTION__ , ": не удалось создать горизонтальную линию! Код ошибки = " , GetLastError ()); return ( false ); } } //--- установим цвет линии ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); //--- установим стиль отображения линии ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style); //--- установим толщину линии ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width); //--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); //--- включим (true) или отключим (false) режим перемещения линии мышью //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden); //--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order); //--- успешное выполнение return ( true ); } //+------------------------------------------------------------------+ //| Перемещение горизонтальной линии | //+------------------------------------------------------------------+ bool HLineMove( constlong chart_ID= 0 , // ID графика conststring name= "HLine" , // имя линии double price= 0 ) // цена линии { //--- если цена линии не задана, то перемещаем ее на уровень текущей цены Bid if (!price) price= SymbolInfoDouble ( Symbol (), SYMBOL_BID ); //--- сбросим значение ошибки ResetLastError (); //--- переместим горизонтальную линию if ( ObjectFind (chart_ID,name)==- 1 ) return ( false ); if (! ObjectMove (chart_ID,name, 0 , 0 ,price)) { Print ( __FUNCTION__ , ": не удалось переместить горизонтальную линию! Код ошибки = " , GetLastError ()); return ( false ); } //--- успешное выполнение return ( true ); } //+------------------------------------------------------------------+ //| Удаляет горизонтальную линию | //+------------------------------------------------------------------+ bool HLineDelete( constlong chart_ID= 0 , // ID графика conststring name= "HLine" ) // имя линии { //--- сбросим значение ошибки ResetLastError (); //--- удалим горизонтальную линию if ( ObjectFind (chart_ID,name)==- 1 ) return ( false ); if (! ObjectDelete (chart_ID,name)) { Print ( __FUNCTION__ , ": не удалось удалить горизонтальную линию! Код ошибки = " , GetLastError ()); return ( false ); } //--- успешное выполнение return ( true ); } //+------------------------------------------------------------------+
그런 코드를 만들었지만 배열을 덮어썼습니다. 뭔가 잘못되었습니다. 무엇이 잘못되었는지 알려주세요.
반대로, 나는 다르게 했을 것입니다.
double a[ 20 ] = { /*массив значений*/ }; double b[ 20 ]; //--- Проверяем массив а на наличие 0 значений int j = 0 ; for ( int i = 0 ; i < 20 ; i++ ) { if ( a[ i ] != 0 ) { b[ j ] = a[ i ]; j++; } } //--- Изменяем размер массива а на значение j //--- Копируем массив b в массив a
알았어 알았어
현재로서는 이것이 모두 허용 가능한 형식과 거리가 멀다는 것을 이해하지만 구매의 경우 침착하게 흰색 을 내더라도 지정된 색상의 점선을 얻을 수 없는 이유를 알 수 있습니다. 또는 그냥 녹색.
잘
두 배 OP = 5.00000
TP = (OP/100);
Print("TP= ",TP);
2017.02.09 21:36:03.650 2015.01.05 04:00:00 마틴 H1-1 USDJPY,H1: TP= 0.5
5를 100으로 나누면 0.5가 되기 때문에 이해가 되지 않습니다.
수정된 코드를 게시했습니다.
//| Close_MA.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern bool Uslovie1= false ; //Uslovie 4 6+50 MA
extern bool OpenOrders= false ; //+---Открыть ордер
extern double Lots= 0.01 ; //Oбьем открываемого ордера
extern const string Настройки_работы_советника= "" ;
extern int Period1= 6 ; //Период 1МА
extern ENUM_APPLIED_PRICE PRICE1= PRICE_MEDIAN ; // 1МА По цене
extern int Period2= 50 ; //Период 2МА
extern ENUM_APPLIED_PRICE PRICE2= PRICE_MEDIAN ; // 2МА По цене
extern int Period3= 1000 ; //Период 3МА
extern ENUM_APPLIED_PRICE PRICE3= PRICE_MEDIAN ; // 3МА По цене
extern uint X= 1 ; // отклонение от ма, пунктов
extern bool PlaySound = false ;
extern int M= 1000 ; // миллисекунды в Sleep
extern int R; // раз повторения музыки
extern int count= 0 ;
extern int Step= 500 ; // счетчик тиков 500макс.
int i; // исходный счетчик ордеров
int p= 0 ; // внутренняя для playSound
bool y = false ; // для удобства сравнений условий 1,2,3,4,5,6
bool dummy; // для выхода функций в переменную
int ticket = 0 ; // тикет открываемого ордера
int Magic= 222 ;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick ()
{
{
if ( Bars < 801 || ( IsTradeAllowed ()== false )) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
return ;
}
//+----------------------------------------------------------------
double ma1= NormalizeDouble ( iMA ( NULL , 0 ,Period1, 0 , MODE_SMA ,PRICE1, 0 ), 5 );
double ma2= NormalizeDouble ( iMA ( NULL , 0 ,Period2, 0 , MODE_SMA ,PRICE1, 0 ), 5 ); //три заданных параметра ма
double ma3= NormalizeDouble ( iMA ( NULL , 0 ,Period3, 0 , MODE_SMA ,PRICE1, 0 ), 5 );
//+----------------------------------------------------------------- Открытие ордеров
//+----Купить
{
if ( MathAbs ( Bid -ma3)< 1000 * Point () && (myOrdersTotal()== false ))
{
ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray ); //+------отправка 1 ордера
HLineCreate( 0 , "buy" , 0 ,FindLastOrderOpenPrice(), clrAzure , STYLE_DASHDOT , 3 );
}
else if (( Ask >=(FindLastOrderOpenPrice()+(Step* _Point ))) && myOrdersTotal()) //+------------если ордер в плюс
{
ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray );
HLineMove( 0 , "buy" ,FindLastOrderOpenPrice());
}
else if (( Ask <=(FindLastOrderOpenPrice()-(Step* _Point ))) && myOrdersTotal()) //+------------если ордер вплюс
{
ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray );
HLineMove( 0 , "buy" ,FindLastOrderOpenPrice());
}
else if (ticket== 0 )
{
return ;
}
/*
//+----Продать
if(MathAbs(Bid-ma3)>1000*Point() && (myOrdersTotal()==false))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);//+------отправка 1 ордера
HLineCreate1();
}
else if ((Ask>=(FindLastOrderOpenPrice()+(Step*_Point)))&& myOrdersTotal())//+------------если ордер в минус
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
HLineMove1();
}
else if ((Ask<=(FindLastOrderOpenPrice()-(Step*_Point)))&& myOrdersTotal())//+------------если ордер вплюс
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
HLineMove1();
}
else if(ticket==0)
{
return;
} */
}
//+------------------------------------------------------------------Условия
if (Uslovie1== true ) //Bid+ma800
{
if (( Bid >=ma3-X* Point && Bid <ma3) || ( Bid <=ma3+X* Point && Bid >ma3))
{
{y= true ;}
}
}
//+------------------------------------------------------------------закрыть покупки или продажи
if ((y== true ) && (myOrdersTotal()== true )) //продажа
{
dummy=( OrderClose ( OrderTicket (), OrderLots (), Ask , 0 ,White));
}
if ((y== true ) && (myOrdersTotal()== false ))
{
dummy= false ;
HLineDelete( 0 , "buy" );
// ExpertRemove();
}
}
//+------------------------------------------------------------------+
bool myOrdersTotal() //если ордера есть
{
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров
{
if ((( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))== true ) && OrderSymbol ()== Symbol () && ( OrderType ()< 2 ))
{
return true ;
}
}
return false ;
}
//-------------------------------------------------------------------
double FindLastOrderOpenPrice()
{
double oldorderopenprice= 0 ;
int oldticket= 0 ;
ticket= 0 ;
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic)
&& ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ))
{
oldticket= OrderTicket ();
if (oldticket>=ticket)
{
ticket=oldticket;
oldorderopenprice= OrderOpenPrice ();
}
}
}
return (oldorderopenprice);
}
//-------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Создает горизонтальную линию |
//+------------------------------------------------------------------+
bool HLineCreate( const long chart_ID= 0 , // ID графика
const string name= "HLine" , // имя линии
const int sub_window= 0 , // номер подокна
double price= 0 , // цена линии
const color clr= clrRed , // цвет линии
const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль линии
const int width= 1 , // толщина линии
const bool back= false , // на заднем плане
const bool selection= true , // выделить для перемещений
const bool hidden= true , // скрыт в списке объектов
const long z_order= 0 ) // приоритет на нажатие мышью
{
//--- если цена не задана, то установим ее на уровне текущей цены Bid
if (!price)
price= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- сбросим значение ошибки
ResetLastError ();
//--- создадим горизонтальную линию
if ( ObjectFind (chart_ID,name)!=sub_window)
{
if (! ObjectCreate (chart_ID,name, OBJ_HLINE ,sub_window, 0 ,price))
{
Print ( __FUNCTION__ ,
": не удалось создать горизонтальную линию! Код ошибки = " , GetLastError ());
return ( false );
}
}
//--- установим цвет линии
ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль отображения линии
ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим толщину линии
ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
//| Перемещение горизонтальной линии |
//+------------------------------------------------------------------+
bool HLineMove( const long chart_ID= 0 , // ID графика
const string name= "HLine" , // имя линии
double price= 0 ) // цена линии
{
//--- если цена линии не задана, то перемещаем ее на уровень текущей цены Bid
if (!price)
price= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- сбросим значение ошибки
ResetLastError ();
//--- переместим горизонтальную линию
if ( ObjectFind (chart_ID,name)==- 1 ) return ( false );
if (! ObjectMove (chart_ID,name, 0 , 0 ,price))
{
Print ( __FUNCTION__ ,
": не удалось переместить горизонтальную линию! Код ошибки = " , GetLastError ());
return ( false );
}
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
//| Удаляет горизонтальную линию |
//+------------------------------------------------------------------+
bool HLineDelete( const long chart_ID= 0 , // ID графика
const string name= "HLine" ) // имя линии
{
//--- сбросим значение ошибки
ResetLastError ();
//--- удалим горизонтальную линию
if ( ObjectFind (chart_ID,name)==- 1 ) return ( false );
if (! ObjectDelete (chart_ID,name))
{
Print ( __FUNCTION__ ,
": не удалось удалить горизонтальную линию! Код ошибки = " , GetLastError ());
return ( false );
}
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
...
알았어 알았어
현재로서는 이것이 모두 허용 가능한 형식과 거리가 멀다는 것을 이해하지만 구매의 경우 침착하게 흰색 을 내더라도 지정된 색상의 점선을 얻을 수 없는 이유를 알 수 있습니다. 또는 그냥 녹색.
잘
두 배 OP = 5.00000
TP = (OP/100);
Print("TP= ",TP);
2017.02.09 21:36:03.650 2015.01.05 04:00:00 마틴 H1-1 USDJPY,H1: TP= 0.5
5를 100으로 나누면 0.5가 되기 때문에 이해가 되지 않습니다.
왜 거기서 제대로 나누지 못하는지 몰라 다 공유해야지
{
//---
double OP = 5.00000 ;
double TP = OP/ 100 ;
Print ( "TP= " ,TP);
}
결과
2017.02 . 10 06 : 22 : 48.663 test USDCHF,H1: initialized
2017.02 . 10 06 : 22 : 48.663 test USDCHF,H1: TP= 0.05
2017.02 . 10 06 : 22 : 48.663 test USDCHF,H1: uninit reason 0
2017.02 . 10 06 : 22 : 48.663 Script test USDCHF,H1: removed
...
왜 거기서 제대로 나누지 못하는지 몰라 다 공유해야지
안녕하세요.
문제를 처리하는 데 도움이 됩니다.
시가를 변경 하여 보류 중인 주문 을 수정합니다. 성공적인 변경 후 새로운 시가를 요청합니다. 에 답변 발행 된 오래된 , 이전 가격 . 에 어떻게 문제 ?
코드:
modify=OrderModify(OrderTicket(),new_Pr+50*Point,OrderStopLoss(),OrderTakeProfit(),0,Blue);
if(수정==참)
{
Print("구매 중지 주문 수정 OrderOpenPrice() : ",OrderOpenPrice());
}
그리고 기록 로그 :
수정 #1 구매 정지 1.00 GBPUSD에서 1.60150 sl: 1.59590 tp: 1.63464 확인
BUYSTOP 주문 수정 OrderOpenPrice() : 1.6028
수정 #1 구매 정지 1.00 GBPUSD에서 1.60070 sl: 1.59590 tp: 1.63464 확인
BUYSTOP 주문 수정 OrderOpenPrice() : 1.6015
안녕하세요.
문제를 처리하는 데 도움이 됩니다.
시가를 변경 하여 보류 중인 주문 을 수정합니다. 성공적인 변경 후 새로운 시가를 요청합니다. 에 답변 발행 된 오래된 , 이전 가격 . 에 어떻게 문제 ?
코드:
modify=OrderModify(OrderTicket(),new_Pr+50*Point,OrderStopLoss(),OrderTakeProfit(),0,Blue);
if(수정==참)
{
Print("구매 중지 주문 수정 OrderOpenPrice() : ",OrderOpenPrice());
}
그리고 기록 로그 :
수정 #1 구매 정지 1.00 GBPUSD에서 1.60150 sl: 1.59590 tp: 1.63464 확인
BUYSTOP 주문 수정 OrderOpenPrice() : 1.6028
수정 #1 구매 정지 1.00 GBPUSD에서 1.60070 sl: 1.59590 tp: 1.63464 확인
BUYSTOP 주문 수정 OrderOpenPrice() : 1.6015
OrderOpenPrice()에는 OrderSelect()가 적용된 시점의 가격이 포함됩니다. 값 자체는 어떤 식으로든 변경되지 않습니다. 주문을 수정한 후 OrderSelect()를 다시 호출해야 합니다.
도와주세요!
목표는 배열에서 숫자 시퀀스를 유지하면서 배열에서 0(다른 숫자)을 잘라내는 것입니다.
그런 코드를 만들었지만 배열을 덮어썼습니다. 뭔가 잘못되었습니다. 무엇이 잘못되었는지 알려주세요.
//| Test_MassivObrez.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
int massivSize= 19 ; //размер массива
double summDelta[ 19 ]=
{
0 ,
20 ,
30 ,
0 ,
0 ,
51 ,
0 ,
53 ,
54 ,
60 ,
70 ,
80 ,
120 ,
150 ,
0 ,
210 ,
223 ,
232 ,
250 ,
0
};
int SizeMass= ArraySize (summDelta); //Узнаем размер массива
int CalcZrero= 0 ;
for ( int i= 0 ;i<SizeMass;i++)
{
Print ( "Число на проверку=" ,summDelta[i], " цикл " ,i);
if (summDelta[i]!= 0 )
{
Print ( "Число до исключения нуля=" ,summDelta[i], " цикл " ,i);
for ( int i= 0 ;i<SizeMass;i++) printf ( "Состав массива до исключения нуля summDelta[%d] = %G" ,i,summDelta[i]);
ArrayCopy (summDelta,summDelta,i-CalcZrero,i);
Print ( "Число после исключения нуля=" ,summDelta[i-CalcZrero], " цикл " ,i);
for ( int i= 0 ;i<SizeMass;i++) printf ( "Состав массива после исключения нуля summDelta[%d] = %G" ,i,summDelta[i]);
}
else CalcZrero++;
}
for ( int i= 0 ;i<SizeMass;i++) printf ( "Массив после исключения нуля summDelta[%d] = %G" ,i,summDelta[i]);
ArrayResize (summDelta,SizeMass-CalcZrero, 0 );
SizeMass= ArraySize (summDelta); //Узнаем новый размер массива
for ( int i= 0 ;i<SizeMass;i++) printf ( "Массив после исключения нуля и обрезания summDelta[%d] = %G" ,i,summDelta[i]);
}
//+------------------------------------------------------------------+
도와주세요!
목표는 배열에서 숫자 시퀀스를 유지하면서 배열에서 0(다른 숫자)을 잘라내는 것입니다.
그런 코드를 만들었지만 배열을 덮어썼습니다. 뭔가 잘못되었습니다. 무엇이 잘못되었는지 알려주세요.
//| Test_MassivObrez.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
나는 다음과 같이 할 것이다:
double ResummDelta[]; // создадим новый массив
double summDelta[]=
{
0 ,
20 ,
30 ,
0 ,
0 ,
51 ,
0 ,
53 ,
54 ,
60 ,
70 ,
80 ,
120 ,
150 ,
0 ,
210 ,
223 ,
232 ,
250 ,
0
};
for ( int i= 0 ;i< ArraySize (summDelta);i++) {
if (summDelta[i]!= 0 ) {
n++;
ArrayResize (ResummDelta,n+ 1 );
ResummDelta[n]=summDelta[i];
}
}
// Print( ArraySize(summDelta)," = ",ArraySize(ResummDelta) );//Узнаем новый размер массива
도와주세요!
목표는 배열에서 숫자 시퀀스를 유지하면서 배열에서 0(다른 숫자)을 잘라내는 것입니다.
그런 코드를 만들었지만 배열을 덮어썼습니다. 뭔가 잘못되었습니다. 무엇이 잘못되었는지 알려주세요.
반대로, 나는 다르게 했을 것입니다.
double b[ 20 ];
//--- Проверяем массив а на наличие 0 значений
int j = 0 ;
for ( int i = 0 ; i < 20 ; i++ )
{
if ( a[ i ] != 0 )
{
b[ j ] = a[ i ];
j++;
}
}
//--- Изменяем размер массива а на значение j
//--- Копируем массив b в массив a
예, 이런 식으로 실수를 0과 비교하는 정확성에 대한 질문이 여전히 있습니다.
그런 작업에 대해 생각하고 앉아 있습니다. 실제 생활에서 설정 여부를 테스트하지 않았습니다. 또는 다른 옵션을 제공하십시오.
내가 신호를 가지고 있다고 가정해 봅시다 - 스프레드의 급격한 확장과 함께 (뉴스에서)
모든 현재 거래를 닫습니다
그러나 뉴스에 따르면 주문을 닫거나 열 수 없습니다.
따라서 명령을 받으면 OrderClose를 루프에 넣고 닫힐 때까지( OrderSend 와 유사) 실패할 수 있는 다른 명령을 실행합니다.