//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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 ); } //+------------------------------------------------------------------+
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]); } //+------------------------------------------------------------------+
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 martin 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(modify==true)とする。
{
Print("BUYSTOP注文はOrderOpenPrice() : ",OrderOpenPrice())を修正します。
}
そして、 ログエントリー 。
modify #1 buy stop 1.00 GBPUSD at1.60150 sl: 1.59590 tp: 1.63464 ok.
BUYSTOPオーダーはOrderOpenPrice()を修正: 1.6028
modify #1 buy stop 1.00 GBPUSD at1.60070 sl: 1.59590 tp: 1.63464 ok.
BUYSTOPオーダーはOrderOpenPrice()を変更: 1.6015
こんにちは。
質問で助けてください。
始値を変更して、保留中の注文を 変更しています。変更に成功した後、新しい建値を要求する。 レスポンス は に古い、 前の の価格を与える。 では、 何が問題なのでしょうか?
コード
modify=OrderModify(OrderTicket(),new_Pr+50*Point,OrderStopLoss(),OrderTakeProfit(),0,Blue)。
if(modify==true)とする。
{
Print("BUYSTOP注文はOrderOpenPrice() : ",OrderOpenPrice())を修正します。
}
そして、 ログエントリー 。
modify #1 buy stop 1.00 GBPUSD at1.60150 sl: 1.59590 tp: 1.63464 ok.
BUYSTOPオーダーはOrderOpenPrice()を修正: 1.6028
modify #1 buy stop 1.00 GBPUSD at1.60070 sl: 1.59590 tp: 1.63464 ok.
BUYSTOPオーダーはOrderOpenPrice()を変更: 1.6015
OrderOpenPrice() には、OrderSelect() が適用されたときの価格が格納される。値が勝手に変わるなんて、ありえない。注文を変更した後に、再度OrderSelect()を呼び出す必要があります。
助けてください!
目標は、配列の数字の並びを維持したまま、配列からゼロ(他の数字)を切り離すことです
このコードを作成しましたが、配列が上書きされてしまいます - 何かが間違っています - 何が間違っているのかアドバイスしてください。
//| 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]);
}
//+------------------------------------------------------------------+
助けてください!
目的は、配列の数字の並びを維持したまま、配列からゼロ(他の数字)をカットすることです
このコードを作成しましたが、配列が上書きされてしまいます。
//| 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) );//Узнаем новый размер массива
助けてください!
目的は、配列の数字の並びを維持したまま、配列からゼロ(他の数字)をカットすることです
このコードを作成しましたが、配列が上書きされてしまいます。
一見すると、違う方法でやっているように見えます。
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と 同様)、他のコマンドが失敗して終了する可能性があります。