int x= 0 ;
int scale_mas[ 13 ]={ 0 , 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 256 , 512 , 1024 , 2048 , 4096 };//объявление массива
for ( int i= 0 ;i < ArraySize (scale_mas);i++){
if (x == scale_mas[ 0 ])x = scale_mas[ 1 ]; //если х=индекс0, то х=индекс1
if (x >= ArraySize (scale_mas))x = scale_mas[ 11 ]; //если х>= размер массива, то х=индекс11
i=x;
if ( ObjectGetInteger ( 0 , "Button+" , OBJPROP_STATE ) == false ){ //если кнопка "+" нажата
i=i+ 1 ; //увеличиваем индекс на 1
ObjectSetInteger ( 0 , "Button+" , OBJPROP_STATE , true );}
x=i; //присваиваем х значение последнего индекса
if ( ObjectGetInteger ( 0 , "Button-" , OBJPROP_STATE ) == false ){ //если кнопка "-" нажата
i=i- 1 ; //уменьшаем индекс на 1
ObjectSetInteger ( 0 , "Button-" , OBJPROP_STATE , true );}
x=i; //присваиваем х значение последнего индекса
ObjectSetString ( 0 , "=TrendLine" , OBJPROP_TEXT ,scale_mas[x]);}} //выводим результат scale_mas[x]
어제 코드를 작성했는데 제대로 작동하는 것 같지만 더하기 버튼으로 배열의 극한 값에 도달했을 때만 배열의 시작 부분으로 재설정되고 다시 위로 이동합니다. 배열의 최상위 값에 도달할 때 더하기 버튼을 더 클릭하면 최상위 인덱스에서 멈추고 배열의 맨 아래로 재설정되지 않도록 코드에서 무엇을 추가하거나 수정할 수 있습니까? 아니면 버튼 클릭으로 이 아이디어를 구현하기 위해 코드를 어떻게든 단순화할 수 있습니까?
Ivan Revedzhuk : 어제 코드를 작성했는데 제대로 작동하는 것 같지만 더하기 버튼으로 배열의 극한 값에 도달했을 때만 배열의 시작 부분으로 재설정되고 다시 위로 이동합니다. 배열의 최상위 값에 도달할 때 더하기 버튼을 더 클릭하면 최상위 인덱스에서 멈추고 배열의 맨 아래로 재설정되지 않도록 코드에서 무엇을 추가하거나 수정할 수 있습니까? 아니면 버튼 클릭으로 이 아이디어를 구현하기 위해 코드를 어떻게든 단순화할 수 있습니까?
if (x >= ArraySize (scale_mas))
ArraySize (scale_mas)-1; //если х>= размер массива, то ....
글쎄요, 논리가 달라야 합니다. 배열의 인덱스인 + 버튼을 눌렀다. 최대값에 도달하면 증가하지 않지만 최대값으로 유지됩니다. 버튼을 눌렀습니다 - 지수가 감소했습니다. 0에 도달하면 누르기에 응답하지 않고 인덱스 0에 유지됩니다.
아니면 다른 생각이 있었나요?
추신; 그리고 이 질문에 대한 답변으로 플래그 작업 예제를 게시하고 삭제한 사람은 누구입니까? 삭제된 이유는 무엇입니까? 결국 이것은 사람에게 정말 좋은 결정입니다. 왜 제한된 배열이 필요한가요???
아니, 바로 그 생각이었다. 어떻게 하는 것이 맞는지 잘 모르겠어서 그냥 있는 그대로 했습니다. 그러나 프로그램에서 루프가 실행 중일 때 차트의 버튼을 클릭하여 루프를 클릭할 때까지 다른 모든 것이 작동하지 않는다는 것을 알았습니다. 모든 것이 정지된 것과 같습니다. 왜 이런 일이 발생하는지 명확하지 않습니다. 어떻게 든 아이디어를 다른 방식으로 구현할 수있는 옵션이 있다면 감사하겠습니다 ...
어제 코드를 작성했는데 제대로 작동하는 것 같지만 더하기 버튼으로 배열의 극한 값에 도달했을 때만 배열의 시작 부분으로 재설정되고 다시 위로 이동합니다. 배열의 최상위 값에 도달할 때 더하기 버튼을 더 클릭하면 최상위 인덱스에서 멈추고 배열의 맨 아래로 재설정되지 않도록 코드에서 무엇을 추가하거나 수정할 수 있습니까? 아니면 버튼 클릭으로 이 아이디어를 구현하기 위해 코드를 어떻게든 단순화할 수 있습니까?
아마 그렇게 될 것입니다.
아마 그렇게 될 것입니다.
그것도 시도, 동일하게 작동
그것도 시도, 동일하게 작동
나는 즉시 눈치 채지 못했지만 왜 사이클이 있습니까?
나는 즉시 눈치 채지 못했지만 왜 사이클이 있습니까?
그것 없이 어떻게 가능합니까? 내가 어떻게 최선을 다하는지 모르고 논리에 따라 생각하는 대로 할 뿐입니다.
그것 없이 어떻게 가능합니까? 내가 얼마나 최선을 다하는지 모르고 논리에 따라 생각하는 대로 할 뿐입니다.
글쎄요, 논리가 달라야 합니다. 배열의 인덱스인 + 버튼을 눌렀다. 최대값에 도달하면 증가하지 않지만 최대값으로 유지됩니다. 버튼을 눌렀습니다 - 지수가 감소했습니다. 0에 도달하고 누름에 응답하지 않으며 인덱스 0에 유지됩니다.
아니면 다른 생각이 있었나요?
추신; 그리고 이 질문에 대한 답변으로 플래그 작업 예제를 게시하고 삭제한 사람은 누구입니까? 삭제된 이유는 무엇입니까? 결국 이것은 사람에게 정말 좋은 결정입니다. 왜 제한된 배열이 필요한가요???글쎄요, 논리가 달라야 합니다. 배열의 인덱스인 + 버튼을 눌렀다. 최대값에 도달하면 증가하지 않지만 최대값으로 유지됩니다. 버튼을 눌렀습니다 - 지수가 감소했습니다. 0에 도달하면 누르기에 응답하지 않고 인덱스 0에 유지됩니다.
아니면 다른 생각이 있었나요?
추신; 그리고 이 질문에 대한 답변으로 플래그 작업 예제를 게시하고 삭제한 사람은 누구입니까? 삭제된 이유는 무엇입니까? 결국 이것은 사람에게 정말 좋은 결정입니다. 왜 제한된 배열이 필요한가요???아니, 바로 그 생각이었다. 어떻게 하는 것이 맞는지 잘 모르겠어서 그냥 있는 그대로 했습니다. 그러나 프로그램에서 루프가 실행 중일 때 차트의 버튼을 클릭하여 루프를 클릭할 때까지 다른 모든 것이 작동하지 않는다는 것을 알았습니다. 모든 것이 정지된 것과 같습니다. 왜 이런 일이 발생하는지 명확하지 않습니다. 어떻게 든 아이디어를 다른 방식으로 구현할 수있는 옵션이 있다면 감사하겠습니다 ...
모든 것. 문제를 해결했습니다) 배열 및 기타 기타 사항없이. 훨씬 쉬워졌습니다)))
두 번째 질문은 익었습니다. 마우스를 사용하여 상황에 맞는 메뉴를 통해 경고를 설정할 때 나타나는 화살표 설정을 사용하여 코드에서 경고 트리거 수준을 설정하려면 어떻게 해야 합니까?
도와주세요, 이 어드바이저에 기능을 추가하여 EURUSD 창에 설치된 어드바이저가 동일한 개시 매개변수로 동시에 거래를 열 수 있지만 GBPUSD에 대해서는 열리지 않지만 EURUSD에는 열리지 않도록 할 수 있습니다.
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
//| 개발자: Andrey Minaev |
//| 전문가 고문: Stochastic.mq4 |
//| 웹사이트: safe-forex.ru |
//| 메일: minaev.work@mail.ru |
//| 스카이프: 라이브:minaev.work |
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
#property copyright "Safe-Forex.ru"
#속성 링크 "https://safe-forex.ru"
#속성엄격
extern bool Use_Symbol1 = true;
외부 문자열 Symbol1 = "USDJPY";
입력 문자열 설정 = ""; // 어드바이저 설정
입력 정수 마법 = 111; // 마법
입력 이중 고정 볼륨 = 0.01; // 용량
입력 int takeProfit = 500; // 이익
입력 정수 stopLoss = 500; // 상실
int 구매 레벨 = 100을 입력하십시오. // 25 구매 레벨
입력 int 판매 레벨 = 0; // 75 판매 레벨
extern int ADXperiod=15; //ADX 기간 15
외부 intADXLevel=1;
외부 intMAperiod=360; //MA 기간 80
외부 정수 MAperiod_2 = 360; //MA 기간 80
입력 문자열 stochSettings = ""; // 스토캐스틱 오실레이터 표시기 설정
입력 정수 stochPeriodK = 5; // 기간 %K
입력 정수 stochPeriodD = 3; // 기간 %D
입력 정수 stochSlowing = 3; // 천천히 해
ENUM_STO_PRICE 입력 stochPrice = STO_LOWHIGH; // 가격
ENUM_MA_METHOD 입력 stochMethod = MODE_SMA; // 방법
날짜 시간 newCandle; // 현재 차트의 새 캔들
bool allowOpenBuy, // 매수 포지션을 열 수 있는 권한
허용오픈셀; // 매도 포지션을 열 수 있는 권한
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
int OnInit(무효)
{
INIT_SUCCESSED 반환;
}
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
무효 OnDeinit(const int 이유)
{
}
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
무효 OnTick(무효)
{
if(newCandle!=시간[0]) CheckSignalExist(); newCandle=시간[0];
if(allowOpenBuy) 오픈포지션(OP_BUY);
if(allowOpenSell) 오픈포지션(OP_SELL);
}
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
//| 함수는 현재 가격에서 포지션을 엽니다 |
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
무효 OpenPosition(int 유형)
{
이중 가격 = 0.0;
if(유형==OP_BUY) 가격=묻기;
if(유형==OP_SELL) 가격=입찰가;
int ticket=OrderSend(_Symbol,type,fixVolume,price,0,0,0,"",magic,0);
// int ticket=OrderSend(,type,fixVolume,price,0,0,0,"",magic,0);
수면(1000);
if(티켓>0)
{
if(유형==OP_BUY)
{
Print("매수 포지션 오픈, 티켓: ",티켓);
allowOpenBuy=거짓;
// SetStopOrders(티켓);
}
if(유형==OP_SELL)
{
Print("매도 포지션 오픈, 티켓: ",티켓);
allowOpenSell=거짓;
// SetStopOrders(티켓);
}
}
if(티켓<0)
{
if(type==OP_BUY) Print("매수 위치가 열리지 않았습니다, 오류: ",GetLastError());
if(type==OP_SELL) Print("판매 위치가 열리지 않았습니다, 오류: ",GetLastError());
}
}
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
//| 기능은 정지 주문을 설정합니다 |
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
// 무효 SetStopOrders(int 티켓)
//{
// 더블 stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),
// 퍼짐 =MarketInfo(_Symbol,MODE_SPREAD),
// tp = 이익을 취하십시오,
// sl=스톱로스;
// stopLevel+=확산;
// if(tp<stopLevel)
// {
// tp=스톱레벨;
// Print("최소 수익 거리 설정");
// }
// if(sl<stopLevel)
// {
// sl=스톱레벨;
// Print("최소 손실 거리가 설정되었습니다.");
// }
// if(OrderSelect(티켓,SELECT_BY_TICKET))
// {
// int type=OrderType();
// 이중 opp =OrderOpenPrice();
// if(type==OP_BUY) {tp=opp+tp*_Point; sl=opp-sl*_포인트;}
// if(type==OP_SELL) {tp=opp-tp*_Point; sl=op+sl*_포인트;}
// if(OrderModify(티켓, opp, sl, tp, 0))
// {
// if(type==OP_BUY) Print("매수 포지션에 대한 손익 수준이 설정되었습니다. 티켓: ",티켓);
// if(type==OP_SELL) Print("매도 포지션에 대한 손익 수준이 설정되었습니다. 티켓: ",티켓);
// }
// 또 다른 {
// if(type==OP_BUY) Print("구매 위치에 대한 손익 수준이 설정되지 않았습니다. 티켓: ",ticket,", error: ",GetLastError());
// if(type==OP_SELL) Print("판매 포지션에 대한 손익 수준이 설정되지 않았습니다. 티켓: ",ticket,", error: ",GetLastError());
// }
// }
//}
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
//| 함수는 신호를 확인합니다 |
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
무효 CheckSignalExist(무효)
{
이중 ADX1=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,1); ///////////////////////////////
이중 ADX2=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,2);
더블 DPLUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_PLUSDI,1);
더블 DMINUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_MINUSDI,1);
이중 MA=iMA(Symbol(),Period(),MAperiod,0,MODE_SMA,0,1);
이중 MA_2=iMA(Symbol(),Period(),MAperiod_2,0,MODE_SMA,0,1);
//PERIOD_H1
이중 mainLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,1),
mainLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,2),
signLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),
signLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2);
Comment(" ", (매도-입찰)/1.5," ", 입찰-종료[1]," ", 매도-종가[1]);
// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
// && iClose(Symbol(),Period(),1)>MA&& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
// &&닫기[2]<MA&& 닫기[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel
닫기(&C)[10] > 닫기[1]-(닫기[1]-닫기[20])
닫기(&&)[10]>입찰가)
{
Print("매수 포지션을 열라는 신호가 있습니다.");
if(GetPositionsNumber()==0)
{
// allowOpenSell=true;
allowOpenBuy=참;
수면(1000);
Print("매수 포지션을 열 수 있습니다.");
}
}
// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&& mainLine2>sellLevel
// && iClose(Symbol(),Period(),1)<MA&& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
// &&닫기[2]>MA&& 닫기[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel
닫기(&C)[10] < 닫기[1]+(닫기[20]-닫기[1])
닫기(&&)[10]<문의)
{
Print("매도 포지션을 열라는 신호가 있습니다.");
if(GetPositionsNumber()==0)
{
//allowOpenBuy=참;
allowOpenSell=참;
수면(1000);
Print("매도 포지션을 열 수 있습니다.");
}
}
}
////////////////////////////////////////////
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
//| 함수는 열린 위치의 수를 반환합니다 |
//+----------------------------------------------- -------------------------------------------------- ------------------------------------------------+
int GetPositionsNumber(무효)
{
정수 = 0;
for(int i=0; i<OrdersTotal(); i++)
if(주문선택(i,SELECT_BY_POS))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==마법)
숫자++;
반환 번호;
}
//+----------------------------------------------- -------------------------------------------------- --------------------------------
도와주세요, 이 어드바이저에 그러한 기능을 추가하는 것이 가능합니다. 그래서 EURUSD 창에 설치된 어드바이저가 동일한 개시 매개변수로 동시에 거래를 열 수 있지만 GBPUSD에 대해서는 열리지 않지만 EURUSD에는 열리지 않습니다.
실례합니다, 머리는 괜찮으세요? 코드가 한곳에 꽂혔을 뿐만 아니라 주석 처리된 줄도 지우지 않고 빈 줄을 엄청나게 많이 남겼습니다.
당신이 도움을 요청하는 사람들을 존중해야 한다고 생각하지 않습니까???